Mercurial > libavcodec.hg
annotate ac3dec.c @ 5316:a09b700fcfca libavcodec
AC-3 decoder, soc revision 56, Aug 17 14:21:58 2006 UTC by cloud9
Acknowledgements.
| author | jbr |
|---|---|
| date | Sat, 14 Jul 2007 16:01:44 +0000 |
| parents | 31033309ebc9 |
| children | 6d81881f257f |
| rev | line source |
|---|---|
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
1 /* AC3 Audio Decoder. |
|
5316
a09b700fcfca
AC-3 decoder, soc revision 56, Aug 17 14:21:58 2006 UTC by cloud9
jbr
parents:
5315
diff
changeset
|
2 * This code is developed as part of Google Summer of Code 2006 Program. |
|
a09b700fcfca
AC-3 decoder, soc revision 56, Aug 17 14:21:58 2006 UTC by cloud9
jbr
parents:
5315
diff
changeset
|
3 * |
|
a09b700fcfca
AC-3 decoder, soc revision 56, Aug 17 14:21:58 2006 UTC by cloud9
jbr
parents:
5315
diff
changeset
|
4 * Acknowledgements: |
|
a09b700fcfca
AC-3 decoder, soc revision 56, Aug 17 14:21:58 2006 UTC by cloud9
jbr
parents:
5315
diff
changeset
|
5 * |
|
a09b700fcfca
AC-3 decoder, soc revision 56, Aug 17 14:21:58 2006 UTC by cloud9
jbr
parents:
5315
diff
changeset
|
6 * I would like to acknowledge my mentor Benjamin Larsson for his timely |
|
a09b700fcfca
AC-3 decoder, soc revision 56, Aug 17 14:21:58 2006 UTC by cloud9
jbr
parents:
5315
diff
changeset
|
7 * help and excelleng guidance throughout the project. |
|
a09b700fcfca
AC-3 decoder, soc revision 56, Aug 17 14:21:58 2006 UTC by cloud9
jbr
parents:
5315
diff
changeset
|
8 * Thanks a lot Benjamin. |
|
a09b700fcfca
AC-3 decoder, soc revision 56, Aug 17 14:21:58 2006 UTC by cloud9
jbr
parents:
5315
diff
changeset
|
9 * |
|
a09b700fcfca
AC-3 decoder, soc revision 56, Aug 17 14:21:58 2006 UTC by cloud9
jbr
parents:
5315
diff
changeset
|
10 * For exponent decoding the code is reused from liba52 by Michel Lespinasse |
|
a09b700fcfca
AC-3 decoder, soc revision 56, Aug 17 14:21:58 2006 UTC by cloud9
jbr
parents:
5315
diff
changeset
|
11 * and Aaron Holtzman. |
|
a09b700fcfca
AC-3 decoder, soc revision 56, Aug 17 14:21:58 2006 UTC by cloud9
jbr
parents:
5315
diff
changeset
|
12 * http://liba52.sourceforge.net |
|
a09b700fcfca
AC-3 decoder, soc revision 56, Aug 17 14:21:58 2006 UTC by cloud9
jbr
parents:
5315
diff
changeset
|
13 * |
|
a09b700fcfca
AC-3 decoder, soc revision 56, Aug 17 14:21:58 2006 UTC by cloud9
jbr
parents:
5315
diff
changeset
|
14 * Thanks Makoto Matsumoto and Takuji Nishimura for the Mersenne Twister. |
|
a09b700fcfca
AC-3 decoder, soc revision 56, Aug 17 14:21:58 2006 UTC by cloud9
jbr
parents:
5315
diff
changeset
|
15 * |
|
a09b700fcfca
AC-3 decoder, soc revision 56, Aug 17 14:21:58 2006 UTC by cloud9
jbr
parents:
5315
diff
changeset
|
16 * Kaiser-Bessel derived window by Justin Ruggles. |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
17 * |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
18 * Copyright (c) 2006 Kartikey Mahendra BHATT (bhattkm at gmail dot com). |
|
5316
a09b700fcfca
AC-3 decoder, soc revision 56, Aug 17 14:21:58 2006 UTC by cloud9
jbr
parents:
5315
diff
changeset
|
19 * Something is wrong up on cloud # 9! |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
20 * |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
21 * This library is free software; you can redistribute it and/or |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
22 * modify it under the terms of the GNU Lesser General Public |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
23 * License as published by the Free Software Foundation; either |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
24 * version 2 of the License, or (at your option) any later version. |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
25 * |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
26 * This library is distributed in the hope that it will be useful, |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
27 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
28 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
29 * Lesser General Public License for more details. |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
30 * |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
31 * You should have received a copy of the GNU Lesser General Public |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
32 * License along with this library; if not, write to the Free Software |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
33 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
34 */ |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
35 |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
36 #include <stdio.h> |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
37 #include <stddef.h> |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
38 #include <math.h> |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
39 #include <string.h> |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
40 |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
41 #define ALT_BITSTREAM_READER |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
42 |
|
5315
31033309ebc9
AC-3 decoder, soc revision 55, Aug 17 12:25:24 2006 UTC by cloud9
jbr
parents:
5314
diff
changeset
|
43 #include "avcodec.h" |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
44 #include "ac3tab.h" |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
45 #include "ac3_decoder.h" |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
46 #include "bitstream.h" |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
47 #include "dsputil.h" |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
48 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
49 #define N 512 /* constant for IMDCT Block size */ |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
50 |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
51 #define MAX_CHANNELS 6 |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
52 #define BLOCK_SIZE 256 |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
53 #define AUDIO_BLOCKS 6 |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
54 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
55 /* Exponent strategies. */ |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
56 #define AC3_EXPSTR_D15 0x01 |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
57 #define AC3_EXPSTR_D25 0x02 |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
58 #define AC3_EXPSTR_D45 0x03 |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
59 #define AC3_EXPSTR_REUSE 0x00 |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
60 |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
61 /* Bit allocation strategies. */ |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
62 #define AC3_DBASTR_NEW 0x01 |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
63 #define AC3_DBASTR_NONE 0x02 |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
64 #define AC3_DBASTR_RESERVED 0x03 |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
65 #define AC3_DBASTR_REUSE 0x00 |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
66 |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
67 /* Output and input configurations. */ |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
68 #define AC3_OUTPUT_UNMODIFIED 0x01 |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
69 #define AC3_OUTPUT_MONO 0x02 |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
70 #define AC3_OUTPUT_STEREO 0x04 |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
71 #define AC3_OUTPUT_DOLBY 0x08 |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
72 #define AC3_OUTPUT_LFEON 0x10 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
73 |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
74 #define AC3_INPUT_DUALMONO 0x00 |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
75 #define AC3_INPUT_MONO 0x01 |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
76 #define AC3_INPUT_STEREO 0x02 |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
77 #define AC3_INPUT_3F 0x03 |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
78 #define AC3_INPUT_2F_1R 0x04 |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
79 #define AC3_INPUT_3F_1R 0x05 |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
80 #define AC3_INPUT_2F_2R 0x06 |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
81 #define AC3_INPUT_3F_2R 0x07 |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
82 |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
83 /* Mersenne Twister */ |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
84 #define NMT 624 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
85 #define MMT 397 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
86 #define MATRIX_A 0x9908b0df |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
87 #define UPPER_MASK 0x80000000 |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
88 #define LOWER_MASK 0x7fffffff |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
89 |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
90 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
91 typedef struct { |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
92 uint32_t mt[NMT]; |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
93 int mti; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
94 } dither_state; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
95 /* Mersenne Twister */ |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
96 |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
97 typedef struct { |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
98 uint32_t flags; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
99 uint16_t crc1; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
100 uint8_t fscod; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
101 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
102 uint8_t acmod; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
103 uint8_t cmixlev; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
104 uint8_t surmixlev; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
105 uint8_t dsurmod; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
106 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
107 uint8_t blksw; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
108 uint8_t dithflag; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
109 uint8_t cplinu; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
110 uint8_t chincpl; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
111 uint8_t phsflginu; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
112 uint8_t cplbegf; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
113 uint8_t cplendf; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
114 uint8_t cplcoe; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
115 uint32_t cplbndstrc; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
116 uint8_t rematstr; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
117 uint8_t rematflg; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
118 uint8_t cplexpstr; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
119 uint8_t lfeexpstr; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
120 uint8_t chexpstr[5]; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
121 uint8_t sdcycod; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
122 uint8_t fdcycod; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
123 uint8_t sgaincod; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
124 uint8_t dbpbcod; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
125 uint8_t floorcod; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
126 uint8_t csnroffst; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
127 uint8_t cplfsnroffst; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
128 uint8_t cplfgaincod; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
129 uint8_t fsnroffst[5]; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
130 uint8_t fgaincod[5]; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
131 uint8_t lfefsnroffst; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
132 uint8_t lfefgaincod; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
133 uint8_t cplfleak; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
134 uint8_t cplsleak; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
135 uint8_t cpldeltbae; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
136 uint8_t deltbae[5]; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
137 uint8_t cpldeltnseg; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
138 uint8_t cpldeltoffst[8]; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
139 uint8_t cpldeltlen[8]; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
140 uint8_t cpldeltba[8]; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
141 uint8_t deltnseg[5]; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
142 uint8_t deltoffst[5][8]; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
143 uint8_t deltlen[5][8]; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
144 uint8_t deltba[5][8]; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
145 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
146 /* Derived Attributes. */ |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
147 int sampling_rate; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
148 int bit_rate; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
149 int frame_size; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
150 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
151 int nfchans; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
152 int lfeon; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
153 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
154 float chcoeffs[6]; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
155 float cplco[5][18]; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
156 int ncplbnd; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
157 int ncplsubnd; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
158 int cplstrtmant; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
159 int cplendmant; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
160 int endmant[5]; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
161 uint8_t dcplexps[256]; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
162 uint8_t dexps[5][256]; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
163 uint8_t dlfeexps[256]; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
164 uint8_t cplbap[256]; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
165 uint8_t bap[5][256]; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
166 uint8_t lfebap[256]; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
167 int blkoutput; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
168 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
169 DECLARE_ALIGNED_16(float, transform_coeffs[MAX_CHANNELS][BLOCK_SIZE]); |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
170 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
171 /* For IMDCT. */ |
|
5311
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
172 MDCTContext imdct_512; //N/8 point IFFT context |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
173 MDCTContext imdct_256; //N/4 point IFFT context |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
174 DECLARE_ALIGNED_16(float, output[MAX_CHANNELS][BLOCK_SIZE]); |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
175 DECLARE_ALIGNED_16(float, delay[MAX_CHANNELS][BLOCK_SIZE]); |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
176 DECLARE_ALIGNED_16(float, tmp_imdct[BLOCK_SIZE]); |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
177 DECLARE_ALIGNED_16(float, tmp_output[BLOCK_SIZE * 2]); |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
178 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
179 /* Miscellaneous. */ |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
180 GetBitContext gb; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
181 dither_state dith_state; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
182 } AC3DecodeContext; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
183 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
184 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
185 /* BEGIN Mersenne Twister Code. */ |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
186 static void dither_seed(dither_state *state, uint32_t seed) |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
187 { |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
188 if (seed == 0) |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
189 seed = 0x1f2e3d4c; |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
190 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
191 state->mt[0] = seed; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
192 for (state->mti = 1; state->mti < NMT; state->mti++) |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
193 state->mt[state->mti] = ((69069 * state->mt[state->mti - 1]) + 1); |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
194 } |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
195 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
196 static uint32_t dither_uint32(dither_state *state) |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
197 { |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
198 uint32_t y; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
199 static const uint32_t mag01[2] = { 0x00, MATRIX_A }; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
200 int kk; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
201 |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
202 if (state->mti >= NMT) { |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
203 for (kk = 0; kk < NMT - MMT; kk++) { |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
204 y = (state->mt[kk] & UPPER_MASK) | (state->mt[kk + 1] & LOWER_MASK); |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
205 state->mt[kk] = state->mt[kk + MMT] ^ (y >> 1) ^ mag01[y & 0x01]; |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
206 } |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
207 for (;kk < NMT - 1; kk++) { |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
208 y = (state->mt[kk] & UPPER_MASK) | (state->mt[kk + 1] & LOWER_MASK); |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
209 state->mt[kk] = state->mt[kk + (MMT - NMT)] ^ (y >> 1) ^ mag01[y & 0x01]; |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
210 } |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
211 y = (state->mt[NMT - 1] & UPPER_MASK) | (state->mt[0] & LOWER_MASK); |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
212 state->mt[NMT - 1] = state->mt[MMT - 1] ^ (y >> 1) ^ mag01[y & 0x01]; |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
213 |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
214 state->mti = 0; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
215 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
216 |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
217 y = state->mt[state->mti++]; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
218 y ^= (y >> 11); |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
219 y ^= ((y << 7) & 0x9d2c5680); |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
220 y ^= ((y << 15) & 0xefc60000); |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
221 y ^= (y >> 18); |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
222 |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
223 return y; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
224 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
225 |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
226 static inline int16_t dither_int16(dither_state *state) |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
227 { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
228 return ((dither_uint32(state) << 16) >> 16); |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
229 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
230 |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
231 /* END Mersenne Twister */ |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
232 |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
233 /** |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
234 * Generate a Kaiser Window. |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
235 */ |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
236 static void |
|
5313
4bd60d3bab7e
AC-3 decoder, soc revision 53, Aug 17 08:53:44 2006 UTC by cloud9
jbr
parents:
5312
diff
changeset
|
237 k_window_init(int alpha, float *window, int n, int iter) |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
238 { |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
239 int j, k; |
|
5313
4bd60d3bab7e
AC-3 decoder, soc revision 53, Aug 17 08:53:44 2006 UTC by cloud9
jbr
parents:
5312
diff
changeset
|
240 float a, x; |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
241 a = alpha * M_PI / n; |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
242 a = a*a; |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
243 for(k=0; k<n; k++) { |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
244 x = k * (n - k) * a; |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
245 window[k] = 1.0; |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
246 for(j=iter; j>0; j--) { |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
247 window[k] = (window[k] * x / (j*j)) + 1.0; |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
248 } |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
249 } |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
250 } |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
251 |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
252 /** |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
253 * Generate a Kaiser-Bessel Derived Window. |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
254 * @param alpha determines window shape |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
255 * @param window array to fill with window values |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
256 * @param n length of the window |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
257 * @param iter number of iterations to use in BesselI0 |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
258 */ |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
259 static void |
|
5313
4bd60d3bab7e
AC-3 decoder, soc revision 53, Aug 17 08:53:44 2006 UTC by cloud9
jbr
parents:
5312
diff
changeset
|
260 kbd_window_init(int alpha, float *window, int n, int iter) |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
261 { |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
262 int k, n2; |
|
5313
4bd60d3bab7e
AC-3 decoder, soc revision 53, Aug 17 08:53:44 2006 UTC by cloud9
jbr
parents:
5312
diff
changeset
|
263 float *kwindow; |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
264 |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
265 n2 = n >> 1; |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
266 kwindow = &window[n2]; |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
267 k_window_init(alpha, kwindow, n2, iter); |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
268 window[0] = kwindow[0]; |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
269 for(k=1; k<n2; k++) { |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
270 window[k] = window[k-1] + kwindow[k]; |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
271 } |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
272 for(k=0; k<n2; k++) { |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
273 window[k] = sqrt(window[k] / (window[n2-1]+1)); |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
274 window[n-1-k] = window[k]; |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
275 } |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
276 } |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
277 |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
278 static void generate_quantizers_table(int16_t quantizers[], int level, int length) |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
279 { |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
280 int i; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
281 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
282 for (i = 0; i < length; i++) |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
283 quantizers[i] = ((2 * i - level + 1) << 15) / level; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
284 } |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
285 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
286 static void generate_quantizers_table_1(int16_t quantizers[], int level, int length1, int length2, int size) |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
287 { |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
288 int i, j; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
289 int16_t v; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
290 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
291 for (i = 0; i < length1; i++) { |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
292 v = ((2 * i - level + 1) << 15) / level; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
293 for (j = 0; j < length2; j++) |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
294 quantizers[i * length2 + j] = v; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
295 } |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
296 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
297 for (i = length1 * length2; i < size; i++) |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
298 quantizers[i] = 0; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
299 } |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
300 |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
301 static void generate_quantizers_table_2(int16_t quantizers[], int level, int length1, int length2, int size) |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
302 { |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
303 int i, j; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
304 int16_t v; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
305 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
306 for (i = 0; i < length1; i++) { |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
307 v = ((2 * (i % level) - level + 1) << 15) / level; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
308 for (j = 0; j < length2; j++) |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
309 quantizers[i * length2 + j] = v; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
310 } |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
311 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
312 for (i = length1 * length2; i < size; i++) |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
313 quantizers[i] = 0; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
314 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
315 } |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
316 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
317 static void generate_quantizers_table_3(int16_t quantizers[], int level, int length1, int length2, int size) |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
318 { |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
319 int i, j; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
320 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
321 for (i = 0; i < length1; i++) |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
322 for (j = 0; j < length2; j++) |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
323 quantizers[i * length2 + j] = ((2 * (j % level) - level + 1) << 15) / level; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
324 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
325 for (i = length1 * length2; i < size; i++) |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
326 quantizers[i] = 0; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
327 } |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
328 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
329 static void ac3_tables_init(void) |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
330 { |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
331 int i, j, k, l, v; |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
332 /* compute bndtab and masktab from bandsz */ |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
333 k = 0; |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
334 l = 0; |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
335 for(i=0;i<50;i++) { |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
336 bndtab[i] = l; |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
337 v = bndsz[i]; |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
338 for(j=0;j<v;j++) masktab[k++]=i; |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
339 l += v; |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
340 } |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
341 masktab[253] = masktab[254] = masktab[255] = 0; |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
342 bndtab[50] = 0; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
343 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
344 /* Exponent Decoding Tables */ |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
345 for (i = 0; i < 5; i++) { |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
346 v = i - 2; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
347 for (j = 0; j < 25; j++) |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
348 exp_1[i * 25 + j] = v; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
349 } |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
350 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
351 for (i = 0; i < 25; i++) { |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
352 v = (i % 5) - 2; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
353 for (j = 0; j < 5; j++) |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
354 exp_2[i * 5 + j] = v; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
355 } |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
356 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
357 for (i = 0; i < 25; i++) { |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
358 v = -2; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
359 for (j = 0; j < 5; j++) |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
360 exp_3[i * 5 + j] = v++; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
361 } |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
362 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
363 for (i = 125; i < 128; i++) |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
364 exp_1[i] = exp_2[i] = exp_3[i] = 25; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
365 /* End Exponent Decoding Tables */ |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
366 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
367 /* Quantizer ungrouping tables. */ |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
368 // for level-3 quantizers |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
369 generate_quantizers_table_1(l3_quantizers_1, 3, 3, 9, 32); |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
370 generate_quantizers_table_2(l3_quantizers_2, 3, 9, 3, 32); |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
371 generate_quantizers_table_3(l3_quantizers_3, 3, 9, 3, 32); |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
372 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
373 //for level-5 quantizers |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
374 generate_quantizers_table_1(l5_quantizers_1, 5, 5, 25, 128); |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
375 generate_quantizers_table_2(l5_quantizers_2, 5, 25, 5, 128); |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
376 generate_quantizers_table_3(l5_quantizers_3, 5, 25, 5, 128); |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
377 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
378 //for level-7 quantizers |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
379 generate_quantizers_table(l7_quantizers, 7, 7); |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
380 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
381 //for level-4 quantizers |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
382 generate_quantizers_table_2(l11_quantizers_1, 11, 11, 11, 128); |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
383 generate_quantizers_table_3(l11_quantizers_2, 11, 11, 11, 128); |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
384 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
385 //for level-15 quantizers |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
386 generate_quantizers_table(l15_quantizers, 15, 15); |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
387 |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
388 /* Kaiser-Bessel derived window. */ |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
389 kbd_window_init(5, window, 256, 100); |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
390 } |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
391 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
392 |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
393 static int ac3_decode_init(AVCodecContext *avctx) |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
394 { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
395 AC3DecodeContext *ctx = avctx->priv_data; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
396 |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
397 ac3_tables_init(); |
|
5311
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
398 ff_mdct_init(&ctx->imdct_256, 8, 1); |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
399 ff_mdct_init(&ctx->imdct_512, 9, 1); |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
400 dither_seed(&ctx->dith_state, 0); |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
401 |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
402 return 0; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
403 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
404 |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
405 static int ac3_synchronize(uint8_t *buf, int buf_size) |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
406 { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
407 int i; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
408 |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
409 for (i = 0; i < buf_size - 1; i++) |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
410 if (buf[i] == 0x0b && buf[i + 1] == 0x77) |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
411 return i; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
412 |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
413 return -1; |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
414 } |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
415 |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
416 //Returns -1 when 'fscod' is not valid; |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
417 static int ac3_parse_sync_info(AC3DecodeContext *ctx) |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
418 { |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
419 GetBitContext *gb = &ctx->gb; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
420 int frmsizecod, bsid; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
421 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
422 skip_bits(gb, 16); //skip the sync_word, sync_info->sync_word = get_bits(gb, 16); |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
423 ctx->crc1 = get_bits(gb, 16); |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
424 ctx->fscod = get_bits(gb, 2); |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
425 if (ctx->fscod == 0x03) |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
426 return 0; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
427 frmsizecod = get_bits(gb, 6); |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
428 if (frmsizecod >= 38) |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
429 return 0; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
430 ctx->sampling_rate = ac3_freqs[ctx->fscod]; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
431 ctx->bit_rate = ac3_bitratetab[frmsizecod >> 1]; |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
432 |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
433 /* we include it here in order to determine validity of ac3 frame */ |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
434 bsid = get_bits(gb, 5); |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
435 if (bsid > 0x08) |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
436 return 0; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
437 skip_bits(gb, 3); //skip the bsmod, bsi->bsmod = get_bits(gb, 3); |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
438 |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
439 switch (ctx->fscod) { |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
440 case 0x00: |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
441 ctx->frame_size = 4 * ctx->bit_rate; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
442 return ctx->frame_size; |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
443 case 0x01: |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
444 ctx->frame_size = 2 * (320 * ctx->bit_rate / 147 + (frmsizecod & 1)); |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
445 return ctx->frame_size; |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
446 case 0x02: |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
447 ctx->frame_size = 6 * ctx->bit_rate; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
448 return ctx->frame_size; |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
449 } |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
450 |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
451 /* never reached */ |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
452 return 0; |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
453 } |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
454 |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
455 static void ac3_parse_bsi(AC3DecodeContext *ctx) |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
456 { |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
457 GetBitContext *gb = &ctx->gb; |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
458 int i; |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
459 |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
460 ctx->cmixlev = 0; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
461 ctx->surmixlev = 0; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
462 ctx->dsurmod = 0; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
463 ctx->nfchans = 0; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
464 ctx->cpldeltbae = AC3_DBASTR_NONE; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
465 ctx->cpldeltnseg = 0; |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
466 for (i = 0; i < 5; i++) { |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
467 ctx->deltbae[i] = AC3_DBASTR_NONE; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
468 ctx->deltnseg[i] = 0; |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
469 } |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
470 |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
471 ctx->acmod = get_bits(gb, 3); |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
472 ctx->nfchans = nfchans_tbl[ctx->acmod]; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
473 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
474 if (ctx->acmod & 0x01 && ctx->acmod != 0x01) |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
475 ctx->cmixlev = get_bits(gb, 2); |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
476 if (ctx->acmod & 0x04) |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
477 ctx->surmixlev = get_bits(gb, 2); |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
478 if (ctx->acmod == 0x02) |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
479 ctx->dsurmod = get_bits(gb, 2); |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
480 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
481 ctx->lfeon = get_bits1(gb); |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
482 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
483 i = !(ctx->acmod); |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
484 do { |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
485 skip_bits(gb, 5); //skip dialog normalization |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
486 if (get_bits1(gb)) |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
487 skip_bits(gb, 8); //skip compression |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
488 if (get_bits1(gb)) |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
489 skip_bits(gb, 8); //skip language code |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
490 if (get_bits1(gb)) |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
491 skip_bits(gb, 7); //skip audio production information |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
492 } while (i--); |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
493 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
494 skip_bits(gb, 2); //skip copyright bit and original bitstream bit |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
495 |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
496 if (get_bits1(gb)) |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
497 skip_bits(gb, 14); //skip timecode1 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
498 if (get_bits1(gb)) |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
499 skip_bits(gb, 14); //skip timecode2 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
500 |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
501 if (get_bits1(gb)) { |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
502 i = get_bits(gb, 6); //additional bsi length |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
503 do { |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
504 skip_bits(gb, 8); |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
505 } while(i--); |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
506 } |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
507 } |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
508 |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
509 /* Decodes the grouped exponents and stores them |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
510 * in decoded exponents (dexps). |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
511 * The code is derived from liba52. |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
512 * Uses liba52 tables. |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
513 */ |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
514 static int decode_exponents(GetBitContext *gb, int expstr, int ngrps, uint8_t absexp, uint8_t *dexps) |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
515 { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
516 int exps; |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
517 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
518 while (ngrps--) { |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
519 exps = get_bits(gb, 7); |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
520 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
521 absexp += exp_1[exps]; |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
522 if (absexp > 24) { |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
523 av_log(NULL, AV_LOG_ERROR, "Absolute Exponent > 24, ngrp = %d\n", ngrps); |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
524 return -ngrps; |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
525 } |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
526 switch (expstr) { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
527 case AC3_EXPSTR_D45: |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
528 *(dexps++) = absexp; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
529 *(dexps++) = absexp; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
530 case AC3_EXPSTR_D25: |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
531 *(dexps++) = absexp; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
532 case AC3_EXPSTR_D15: |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
533 *(dexps++) = absexp; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
534 } |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
535 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
536 absexp += exp_2[exps]; |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
537 if (absexp > 24) { |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
538 av_log(NULL, AV_LOG_ERROR, "Absolute Exponent > 24, ngrp = %d\n", ngrps); |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
539 return -ngrps; |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
540 } |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
541 switch (expstr) { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
542 case AC3_EXPSTR_D45: |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
543 *(dexps++) = absexp; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
544 *(dexps++) = absexp; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
545 case AC3_EXPSTR_D25: |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
546 *(dexps++) = absexp; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
547 case AC3_EXPSTR_D15: |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
548 *(dexps++) = absexp; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
549 } |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
550 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
551 absexp += exp_3[exps]; |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
552 if (absexp > 24) { |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
553 av_log(NULL, AV_LOG_ERROR, "Absolute Exponent > 24, ngrp = %d\n", ngrps); |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
554 return -ngrps; |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
555 } |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
556 switch (expstr) { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
557 case AC3_EXPSTR_D45: |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
558 *(dexps++) = absexp; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
559 *(dexps++) = absexp; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
560 case AC3_EXPSTR_D25: |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
561 *(dexps++) = absexp; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
562 case AC3_EXPSTR_D15: |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
563 *(dexps++) = absexp; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
564 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
565 } |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
566 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
567 return 0; |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
568 } |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
569 |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
570 static inline int logadd(int a, int b) |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
571 { |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
572 int c = a - b; |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
573 int address; |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
574 |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
575 address = FFMIN((ABS(c) >> 1), 255); |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
576 |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
577 if (c >= 0) |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
578 return (a + latab[address]); |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
579 else |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
580 return (b + latab[address]); |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
581 } |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
582 |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
583 static inline int calc_lowcomp(int a, int b0, int b1, int bin) |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
584 { |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
585 if (bin < 7) { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
586 if ((b0 + 256) == b1) |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
587 a = 384; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
588 else if (b0 > b1) |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
589 a = FFMAX(0, (a - 64)); |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
590 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
591 else if (bin < 20) { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
592 if ((b0 + 256) == b1) |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
593 a = 320; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
594 else if (b0 > b1) |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
595 a = FFMAX(0, (a - 64)); |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
596 } |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
597 else |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
598 a = FFMAX(0, (a - 128)); |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
599 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
600 return a; |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
601 } |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
602 |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
603 /* do the bit allocation for chnl. |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
604 * chnl = 0 to 4 - fbw channel |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
605 * chnl = 5 coupling channel |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
606 * chnl = 6 lfe channel |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
607 */ |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
608 static void do_bit_allocation(AC3DecodeContext *ctx, int chnl) |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
609 { |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
610 int16_t psd[256], bndpsd[50], excite[50], mask[50], delta; |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
611 int sdecay, fdecay, sgain, dbknee, floor; |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
612 int lowcomp = 0, fgain = 0, snroffset = 0, fastleak = 0, slowleak = 0, do_delta = 0; |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
613 int start = 0, end = 0, bin = 0, i = 0, j = 0, k = 0, lastbin = 0, bndstrt = 0; |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
614 int bndend = 0, begin = 0, deltnseg = 0, band = 0, seg = 0, address = 0; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
615 int fscod = ctx->fscod; |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
616 uint8_t *deltoffst = 0, *deltlen = 0, *deltba = 0; |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
617 uint8_t *exps = 0, *bap = 0; |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
618 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
619 /* initialization */ |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
620 sdecay = sdecaytab[ctx->sdcycod]; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
621 fdecay = fdecaytab[ctx->fdcycod]; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
622 sgain = sgaintab[ctx->sgaincod]; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
623 dbknee = dbkneetab[ctx->dbpbcod]; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
624 floor = floortab[ctx->floorcod]; |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
625 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
626 if (chnl == 5) { |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
627 start = ctx->cplstrtmant; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
628 end = ctx->cplendmant; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
629 fgain = fgaintab[ctx->cplfgaincod]; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
630 snroffset = (((ctx->csnroffst - 15) << 4) + ctx->cplfsnroffst) << 2; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
631 fastleak = (ctx->cplfleak << 8) + 768; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
632 slowleak = (ctx->cplsleak << 8) + 768; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
633 exps = ctx->dcplexps; |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
634 bap = ctx->cplbap; |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
635 if (ctx->cpldeltbae == AC3_DBASTR_NEW || ctx->deltbae == AC3_DBASTR_REUSE) { |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
636 do_delta = 1; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
637 deltnseg = ctx->cpldeltnseg; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
638 deltoffst = ctx->cpldeltoffst; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
639 deltlen = ctx->cpldeltlen; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
640 deltba = ctx->cpldeltba; |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
641 } |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
642 } |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
643 else if (chnl == 6) { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
644 start = 0; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
645 end = 7; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
646 lowcomp = 0; |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
647 fastleak = 0; |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
648 slowleak = 0; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
649 fgain = fgaintab[ctx->lfefgaincod]; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
650 snroffset = (((ctx->csnroffst - 15) << 4) + ctx->lfefsnroffst) << 2; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
651 exps = ctx->dlfeexps; |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
652 bap = ctx->lfebap; |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
653 } |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
654 else { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
655 start = 0; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
656 end = ctx->endmant[chnl]; |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
657 lowcomp = 0; |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
658 fastleak = 0; |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
659 slowleak = 0; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
660 fgain = fgaintab[ctx->fgaincod[chnl]]; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
661 snroffset = (((ctx->csnroffst - 15) << 4) + ctx->fsnroffst[chnl]) << 2; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
662 exps = ctx->dexps[chnl]; |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
663 bap = ctx->bap[chnl]; |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
664 if (ctx->deltbae[chnl] == AC3_DBASTR_NEW || ctx->deltbae[chnl] == AC3_DBASTR_REUSE) { |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
665 do_delta = 1; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
666 deltnseg = ctx->deltnseg[chnl]; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
667 deltoffst = ctx->deltoffst[chnl]; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
668 deltlen = ctx->deltlen[chnl]; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
669 deltba = ctx->deltba[chnl]; |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
670 } |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
671 } |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
672 |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
673 for (bin = start; bin < end; bin++) /* exponent mapping into psd */ |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
674 psd[bin] = (3072 - (exps[bin] << 7)); |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
675 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
676 /* psd integration */ |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
677 j = start; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
678 k = masktab[start]; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
679 do { |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
680 lastbin = FFMIN((bndtab[k] + bndsz[k]), end); |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
681 bndpsd[k] = psd[j]; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
682 j++; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
683 for (i = j; i < lastbin; i++) { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
684 bndpsd[k] = logadd(bndpsd[k], psd[j]); |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
685 j++; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
686 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
687 k++; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
688 } while (end > lastbin); |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
689 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
690 /* compute the excite function */ |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
691 bndstrt = masktab[start]; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
692 bndend = masktab[end - 1] + 1; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
693 if (bndstrt == 0) { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
694 lowcomp = calc_lowcomp(lowcomp, bndpsd[0], bndpsd[1], 0); |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
695 excite[0] = bndpsd[0] - fgain - lowcomp; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
696 lowcomp = calc_lowcomp(lowcomp, bndpsd[1], bndpsd[2], 1); |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
697 excite[1] = bndpsd[1] - fgain - lowcomp; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
698 begin = 7; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
699 for (bin = 2; bin < 7; bin++) { |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
700 if ((bndend != 7) || (bin != 6)) |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
701 lowcomp = calc_lowcomp(lowcomp, bndpsd[bin], bndpsd[bin + 1], bin); |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
702 fastleak = bndpsd[bin] - fgain; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
703 slowleak = bndpsd[bin] - sgain; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
704 excite[bin] = fastleak - lowcomp; |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
705 if ((bndend != 7) || (bin != 6)) |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
706 if (bndpsd[bin] <= bndpsd[bin + 1]) { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
707 begin = bin + 1; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
708 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
709 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
710 } |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
711 for (bin = begin; bin < FFMIN(bndend, 22); bin++) { |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
712 if ((bndend != 7) || (bin != 6)) |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
713 lowcomp = calc_lowcomp(lowcomp, bndpsd[bin], bndpsd[bin + 1], bin); |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
714 fastleak -= fdecay; |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
715 fastleak = FFMAX(fastleak, (bndpsd[bin] - fgain)); |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
716 slowleak -= sdecay; |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
717 slowleak = FFMAX(slowleak, (bndpsd[bin] - sgain)); |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
718 excite[bin] = FFMAX((fastleak - lowcomp), slowleak); |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
719 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
720 begin = 22; |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
721 } |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
722 else { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
723 begin = bndstrt; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
724 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
725 for (bin = begin; bin < bndend; bin++) { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
726 fastleak -= fdecay; |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
727 fastleak = FFMAX(fastleak, (bndpsd[bin] - fgain)); |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
728 slowleak -= sdecay; |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
729 slowleak = FFMAX(slowleak, (bndpsd[bin] - sgain)); |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
730 excite[bin] = FFMAX(fastleak, slowleak); |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
731 } |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
732 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
733 /* compute the masking curve */ |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
734 for (bin = bndstrt; bin < bndend; bin++) { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
735 if (bndpsd[bin] < dbknee) |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
736 excite[bin] += ((dbknee - bndpsd[bin]) >> 2); |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
737 mask[bin] = FFMAX(excite[bin], hth[bin][fscod]); |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
738 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
739 |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
740 /* apply the delta bit allocation */ |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
741 if (do_delta) { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
742 band = 0; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
743 for (seg = 0; seg < deltnseg + 1; seg++) { |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
744 band += deltoffst[seg]; |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
745 if (deltba[seg] >= 4) |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
746 delta = (deltba[seg] - 3) << 7; |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
747 else |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
748 delta = (deltba[seg] - 4) << 7; |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
749 for (k = 0; k < deltlen[seg]; k++) { |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
750 mask[band] += delta; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
751 band++; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
752 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
753 } |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
754 } |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
755 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
756 /*compute the bit allocation */ |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
757 i = start; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
758 j = masktab[start]; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
759 do { |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
760 lastbin = FFMIN((bndtab[j] + bndsz[j]), end); |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
761 mask[j] -= snroffset; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
762 mask[j] -= floor; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
763 if (mask[j] < 0) |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
764 mask[j] = 0; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
765 mask[j] &= 0x1fe0; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
766 mask[j] += floor; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
767 for (k = i; k < lastbin; k++) { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
768 address = (psd[i] - mask[j]) >> 5; |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
769 address = FFMIN(63, (FFMAX(0, address))); |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
770 bap[i] = baptab[address]; |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
771 i++; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
772 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
773 j++; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
774 } while (end > lastbin); |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
775 } |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
776 |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
777 /* Check if snroffsets are zero. */ |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
778 static int is_snr_offsets_zero(AC3DecodeContext *ctx) |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
779 { |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
780 int i; |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
781 |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
782 if ((ctx->csnroffst) || (ctx->cplinu && ctx->cplfsnroffst) || |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
783 (ctx->lfeon && ctx->lfefsnroffst)) |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
784 return 0; |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
785 |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
786 for (i = 0; i < ctx->nfchans; i++) |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
787 if (ctx->fsnroffst[i]) |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
788 return 0; |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
789 |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
790 return 1; |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
791 } |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
792 |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
793 typedef struct { /* grouped mantissas for 3-level 5-leve and 11-level quantization */ |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
794 int16_t l3_quantizers[3]; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
795 int16_t l5_quantizers[3]; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
796 int16_t l11_quantizers[2]; |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
797 int l3ptr; |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
798 int l5ptr; |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
799 int l11ptr; |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
800 } mant_groups; |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
801 |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
802 #define TRANSFORM_COEFF(tc, m, e, f) (tc) = (m) * (f)[(e)] |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
803 |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
804 /* Get the transform coefficients for coupling channel and uncouple channels. |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
805 * The coupling transform coefficients starts at the the cplstrtmant, which is |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
806 * equal to endmant[ch] for fbw channels. Hence we can uncouple channels before |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
807 * getting transform coefficients for the channel. |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
808 */ |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
809 static int get_transform_coeffs_cpling(AC3DecodeContext *ctx, mant_groups *m) |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
810 { |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
811 GetBitContext *gb = &ctx->gb; |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
812 int ch, start, end, cplbndstrc, bnd, gcode, tbap; |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
813 float cplcos[5], cplcoeff; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
814 uint8_t *exps = ctx->dcplexps; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
815 uint8_t *bap = ctx->cplbap; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
816 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
817 cplbndstrc = ctx->cplbndstrc; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
818 start = ctx->cplstrtmant; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
819 bnd = 0; |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
820 |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
821 while (start < ctx->cplendmant) { |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
822 end = start + 12; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
823 while (cplbndstrc & 1) { |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
824 end += 12; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
825 cplbndstrc >>= 1; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
826 } |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
827 cplbndstrc >>= 1; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
828 for (ch = 0; ch < ctx->nfchans; ch++) |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
829 cplcos[ch] = ctx->chcoeffs[ch] * ctx->cplco[ch][bnd]; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
830 bnd++; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
831 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
832 while (start < end) { |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
833 tbap = bap[start]; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
834 switch(tbap) { |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
835 case 0: |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
836 for (ch = 0; ch < ctx->nfchans; ch++) |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
837 if (((ctx->chincpl) >> ch) & 1) { |
|
5311
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
838 if ((ctx->dithflag >> ch) & 1) { |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
839 TRANSFORM_COEFF(cplcoeff, dither_int16(&ctx->dith_state), exps[start], scale_factors); |
|
5311
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
840 ctx->transform_coeffs[ch + 1][start] = cplcoeff * cplcos[ch] * LEVEL_MINUS_3DB; |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
841 } else |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
842 ctx->transform_coeffs[ch + 1][start] = 0; |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
843 } |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
844 start++; |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
845 continue; |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
846 case 1: |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
847 if (m->l3ptr > 2) { |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
848 gcode = get_bits(gb, 5); |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
849 m->l3_quantizers[0] = l3_quantizers_1[gcode]; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
850 m->l3_quantizers[1] = l3_quantizers_2[gcode]; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
851 m->l3_quantizers[2] = l3_quantizers_3[gcode]; |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
852 m->l3ptr = 0; |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
853 } |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
854 TRANSFORM_COEFF(cplcoeff, m->l3_quantizers[m->l3ptr++], exps[start], scale_factors); |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
855 break; |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
856 |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
857 case 2: |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
858 if (m->l5ptr > 2) { |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
859 gcode = get_bits(gb, 7); |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
860 m->l5_quantizers[0] = l5_quantizers_1[gcode]; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
861 m->l5_quantizers[1] = l5_quantizers_2[gcode]; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
862 m->l5_quantizers[2] = l5_quantizers_3[gcode]; |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
863 m->l5ptr = 0; |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
864 } |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
865 TRANSFORM_COEFF(cplcoeff, m->l5_quantizers[m->l5ptr++], exps[start], scale_factors); |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
866 break; |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
867 |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
868 case 3: |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
869 TRANSFORM_COEFF(cplcoeff, l7_quantizers[get_bits(gb, 3)], exps[start], scale_factors); |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
870 break; |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
871 |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
872 case 4: |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
873 if (m->l11ptr > 1) { |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
874 gcode = get_bits(gb, 7); |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
875 m->l11_quantizers[0] = l11_quantizers_1[gcode]; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
876 m->l11_quantizers[1] = l11_quantizers_2[gcode]; |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
877 m->l11ptr = 0; |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
878 } |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
879 TRANSFORM_COEFF(cplcoeff, m->l11_quantizers[m->l11ptr++], exps[start], scale_factors); |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
880 break; |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
881 |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
882 case 5: |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
883 TRANSFORM_COEFF(cplcoeff, l15_quantizers[get_bits(gb, 4)], exps[start], scale_factors); |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
884 break; |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
885 |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
886 default: |
|
5311
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
887 TRANSFORM_COEFF(cplcoeff, get_sbits(gb, qntztab[tbap]) << (16 - qntztab[tbap]), |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
888 exps[start], scale_factors); |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
889 } |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
890 for (ch = 0; ch < ctx->nfchans; ch++) |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
891 if ((ctx->chincpl >> ch) & 1) |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
892 ctx->transform_coeffs[ch + 1][start] = cplcoeff * cplcos[ch]; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
893 start++; |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
894 } |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
895 } |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
896 |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
897 return 0; |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
898 } |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
899 |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
900 /* Get the transform coefficients for particular channel */ |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
901 static int get_transform_coeffs_ch(AC3DecodeContext *ctx, int ch_index, mant_groups *m) |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
902 { |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
903 GetBitContext *gb = &ctx->gb; |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
904 int i, gcode, tbap, dithflag, end; |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
905 uint8_t *exps; |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
906 uint8_t *bap; |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
907 float *coeffs; |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
908 float factors[25]; |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
909 |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
910 for (i = 0; i < 25; i++) |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
911 factors[i] = scale_factors[i] * ctx->chcoeffs[ch_index]; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
912 |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
913 if (ch_index != -1) { /* fbw channels */ |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
914 dithflag = (ctx->dithflag >> ch_index) & 1; |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
915 exps = ctx->dexps[ch_index]; |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
916 bap = ctx->bap[ch_index]; |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
917 coeffs = ctx->transform_coeffs[ch_index + 1]; |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
918 end = ctx->endmant[ch_index]; |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
919 } else if (ch_index == -1) { |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
920 dithflag = 0; |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
921 exps = ctx->dlfeexps; |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
922 bap = ctx->lfebap; |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
923 coeffs = ctx->transform_coeffs[0]; |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
924 end = 7; |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
925 } |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
926 |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
927 |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
928 for (i = 0; i < end; i++) { |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
929 tbap = bap[i]; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
930 switch (tbap) { |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
931 case 0: |
|
5311
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
932 if (!dithflag) { |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
933 coeffs[i] = 0; |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
934 continue; |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
935 } |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
936 else { |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
937 TRANSFORM_COEFF(coeffs[i], dither_int16(&ctx->dith_state), exps[i], factors); |
|
5311
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
938 coeffs[i] *= LEVEL_MINUS_3DB; |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
939 continue; |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
940 } |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
941 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
942 case 1: |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
943 if (m->l3ptr > 2) { |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
944 gcode = get_bits(gb, 5); |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
945 m->l3_quantizers[0] = l3_quantizers_1[gcode]; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
946 m->l3_quantizers[1] = l3_quantizers_2[gcode]; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
947 m->l3_quantizers[2] = l3_quantizers_3[gcode]; |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
948 m->l3ptr = 0; |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
949 } |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
950 TRANSFORM_COEFF(coeffs[i], m->l3_quantizers[m->l3ptr++], exps[i], factors); |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
951 continue; |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
952 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
953 case 2: |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
954 if (m->l5ptr > 2) { |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
955 gcode = get_bits(gb, 7); |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
956 m->l5_quantizers[0] = l5_quantizers_1[gcode]; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
957 m->l5_quantizers[1] = l5_quantizers_2[gcode]; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
958 m->l5_quantizers[2] = l5_quantizers_3[gcode]; |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
959 m->l5ptr = 0; |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
960 } |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
961 TRANSFORM_COEFF(coeffs[i], m->l5_quantizers[m->l5ptr++], exps[i], factors); |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
962 continue; |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
963 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
964 case 3: |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
965 TRANSFORM_COEFF(coeffs[i], l7_quantizers[get_bits(gb, 3)], exps[i], factors); |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
966 continue; |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
967 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
968 case 4: |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
969 if (m->l11ptr > 1) { |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
970 gcode = get_bits(gb, 7); |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
971 m->l11_quantizers[0] = l11_quantizers_1[gcode]; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
972 m->l11_quantizers[1] = l11_quantizers_2[gcode]; |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
973 m->l11ptr = 0; |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
974 } |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
975 TRANSFORM_COEFF(coeffs[i], m->l11_quantizers[m->l11ptr++], exps[i], factors); |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
976 continue; |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
977 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
978 case 5: |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
979 TRANSFORM_COEFF(coeffs[i], l15_quantizers[get_bits(gb, 4)], exps[i], factors); |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
980 continue; |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
981 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
982 default: |
|
5311
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
983 TRANSFORM_COEFF(coeffs[i], get_sbits(gb, qntztab[tbap]) << (16 - qntztab[tbap]), exps[i], factors); |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
984 continue; |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
985 } |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
986 } |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
987 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
988 return 0; |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
989 } |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
990 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
991 static int get_transform_coeffs(AC3DecodeContext * ctx) |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
992 { |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
993 int i, end; |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
994 int got_cplchan = 0; |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
995 mant_groups m; |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
996 |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
997 m.l3ptr = m.l5ptr = m.l11ptr = 3; |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
998 |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
999 for (i = 0; i < ctx->nfchans; i++) { |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1000 /* transform coefficients for individual channel */ |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
1001 if (get_transform_coeffs_ch(ctx, i, &m)) |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1002 return -1; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1003 /* tranform coefficients for coupling channels */ |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1004 if ((ctx->chincpl >> i) & 1) { |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1005 if (!got_cplchan) { |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1006 if (get_transform_coeffs_cpling(ctx, &m)) { |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1007 av_log(NULL, AV_LOG_ERROR, "error in decoupling channels\n"); |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1008 return -1; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1009 } |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1010 got_cplchan = 1; |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1011 } |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1012 end = ctx->cplendmant; |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1013 } else |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1014 end = ctx->endmant[i]; |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1015 do |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1016 ctx->transform_coeffs[i + 1][end] = 0; |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1017 while(++end < 256); |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1018 } |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1019 if (ctx->lfeon) { |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
1020 if (get_transform_coeffs_ch(ctx, -1, &m)) |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1021 return -1; |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1022 for (i = 7; i < 256; i++) { |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1023 ctx->transform_coeffs[0][i] = 0; |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1024 } |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
1025 } |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
1026 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1027 return 0; |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
1028 } |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
1029 |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1030 static void do_rematrixing1(AC3DecodeContext *ctx, int start, int end) |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
1031 { |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1032 float tmp0, tmp1; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1033 |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1034 while (start < end) { |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1035 tmp0 = ctx->transform_coeffs[1][start]; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1036 tmp1 = ctx->transform_coeffs[2][start]; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1037 ctx->transform_coeffs[1][start] = tmp0 + tmp1; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1038 ctx->transform_coeffs[2][start] = tmp0 - tmp1; |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1039 start++; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1040 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1041 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1042 |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1043 static void do_rematrixing(AC3DecodeContext *ctx) |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1044 { |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
1045 int bnd1 = 13, bnd2 = 25, bnd3 = 37, bnd4 = 61; |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
1046 int end, bndend; |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1047 |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
1048 end = FFMIN(ctx->endmant[0], ctx->endmant[1]); |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
1049 |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1050 if (ctx->rematflg & 1) |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1051 do_rematrixing1(ctx, bnd1, bnd2); |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
1052 |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1053 if (ctx->rematflg & 2) |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1054 do_rematrixing1(ctx, bnd2, bnd3); |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
1055 |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
1056 bndend = bnd4; |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
1057 if (bndend > end) { |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
1058 bndend = end; |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
1059 if (ctx->rematflg & 4) |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1060 do_rematrixing1(ctx, bnd3, bndend); |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
1061 } else { |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
1062 if (ctx->rematflg & 4) |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1063 do_rematrixing1(ctx, bnd3, bnd4); |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
1064 if (ctx->rematflg & 8) |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
1065 do_rematrixing1(ctx, bnd4, end); |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1066 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1067 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1068 |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1069 static void get_downmix_coeffs(AC3DecodeContext *ctx) |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1070 { |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1071 int from = ctx->acmod; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1072 int to = ctx->blkoutput; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1073 float clev = clevs[ctx->cmixlev]; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1074 float slev = slevs[ctx->surmixlev]; |
|
5311
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1075 float nf = 1.0; //normalization factor for downmix coeffs |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1076 |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1077 if (to == AC3_OUTPUT_UNMODIFIED) |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1078 return; |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
1079 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1080 switch (from) { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1081 case AC3_INPUT_DUALMONO: |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1082 switch (to) { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1083 case AC3_OUTPUT_MONO: |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1084 case AC3_OUTPUT_STEREO: /* We Assume that sum of both mono channels is requested */ |
|
5311
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1085 nf = 0.5; |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1086 ctx->chcoeffs[0] *= nf; |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1087 ctx->chcoeffs[1] *= nf; |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1088 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1089 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1090 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1091 case AC3_INPUT_MONO: |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1092 switch (to) { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1093 case AC3_OUTPUT_STEREO: |
|
5311
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1094 nf = LEVEL_MINUS_3DB; |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1095 ctx->chcoeffs[0] *= nf; |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1096 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1097 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1098 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1099 case AC3_INPUT_STEREO: |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1100 switch (to) { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1101 case AC3_OUTPUT_MONO: |
|
5311
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1102 nf = LEVEL_MINUS_3DB; |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1103 ctx->chcoeffs[0] *= nf; |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1104 ctx->chcoeffs[1] *= nf; |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1105 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1106 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1107 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1108 case AC3_INPUT_3F: |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1109 switch (to) { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1110 case AC3_OUTPUT_MONO: |
|
5311
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1111 nf = LEVEL_MINUS_3DB / (1.0 + clev); |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1112 ctx->chcoeffs[0] *= (nf * LEVEL_MINUS_3DB); |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1113 ctx->chcoeffs[2] *= (nf * LEVEL_MINUS_3DB); |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1114 ctx->chcoeffs[1] *= ((nf * clev * LEVEL_MINUS_3DB) / 2.0); |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1115 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1116 case AC3_OUTPUT_STEREO: |
|
5311
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1117 nf = 1.0 / (1.0 + clev); |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1118 ctx->chcoeffs[0] *= nf; |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1119 ctx->chcoeffs[2] *= nf; |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1120 ctx->chcoeffs[1] *= (nf * clev); |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1121 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1122 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1123 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1124 case AC3_INPUT_2F_1R: |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1125 switch (to) { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1126 case AC3_OUTPUT_MONO: |
|
5311
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1127 nf = 2.0 * LEVEL_MINUS_3DB / (2.0 + slev); |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1128 ctx->chcoeffs[0] *= (nf * LEVEL_MINUS_3DB); |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1129 ctx->chcoeffs[1] *= (nf * LEVEL_MINUS_3DB); |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1130 ctx->chcoeffs[2] *= (nf * slev * LEVEL_MINUS_3DB); |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1131 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1132 case AC3_OUTPUT_STEREO: |
|
5311
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1133 nf = 1.0 / (1.0 + (slev * LEVEL_MINUS_3DB)); |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1134 ctx->chcoeffs[0] *= nf; |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1135 ctx->chcoeffs[1] *= nf; |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1136 ctx->chcoeffs[2] *= (nf * slev * LEVEL_MINUS_3DB); |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1137 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1138 case AC3_OUTPUT_DOLBY: |
|
5311
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1139 nf = 1.0 / (1.0 + LEVEL_MINUS_3DB); |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1140 ctx->chcoeffs[0] *= nf; |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1141 ctx->chcoeffs[1] *= nf; |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1142 ctx->chcoeffs[2] *= (nf * LEVEL_MINUS_3DB); |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1143 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1144 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1145 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1146 case AC3_INPUT_3F_1R: |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1147 switch (to) { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1148 case AC3_OUTPUT_MONO: |
|
5311
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1149 nf = LEVEL_MINUS_3DB / (1.0 + clev + (slev / 2.0)); |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1150 ctx->chcoeffs[0] *= (nf * LEVEL_MINUS_3DB); |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1151 ctx->chcoeffs[2] *= (nf * LEVEL_MINUS_3DB); |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1152 ctx->chcoeffs[1] *= (nf * clev * LEVEL_PLUS_3DB); |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1153 ctx->chcoeffs[3] *= (nf * slev * LEVEL_MINUS_3DB); |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1154 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1155 case AC3_OUTPUT_STEREO: |
|
5311
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1156 nf = 1.0 / (1.0 + clev + (slev * LEVEL_MINUS_3DB)); |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1157 ctx->chcoeffs[0] *= nf; |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1158 ctx->chcoeffs[2] *= nf; |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1159 ctx->chcoeffs[1] *= (nf * clev); |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1160 ctx->chcoeffs[3] *= (nf * slev * LEVEL_MINUS_3DB); |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1161 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1162 case AC3_OUTPUT_DOLBY: |
|
5311
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1163 nf = 1.0 / (1.0 + (2.0 * LEVEL_MINUS_3DB)); |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1164 ctx->chcoeffs[0] *= nf; |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1165 ctx->chcoeffs[1] *= nf; |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1166 ctx->chcoeffs[1] *= (nf * LEVEL_MINUS_3DB); |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1167 ctx->chcoeffs[3] *= (nf * LEVEL_MINUS_3DB); |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1168 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1169 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1170 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1171 case AC3_INPUT_2F_2R: |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1172 switch (to) { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1173 case AC3_OUTPUT_MONO: |
|
5311
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1174 nf = LEVEL_MINUS_3DB / (1.0 + slev); |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1175 ctx->chcoeffs[0] *= (nf * LEVEL_MINUS_3DB); |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1176 ctx->chcoeffs[1] *= (nf * LEVEL_MINUS_3DB); |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1177 ctx->chcoeffs[2] *= (nf * slev * LEVEL_MINUS_3DB); |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1178 ctx->chcoeffs[3] *= (nf * slev * LEVEL_MINUS_3DB); |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1179 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1180 case AC3_OUTPUT_STEREO: |
|
5311
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1181 nf = 1.0 / (1.0 + slev); |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1182 ctx->chcoeffs[0] *= nf; |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1183 ctx->chcoeffs[1] *= nf; |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1184 ctx->chcoeffs[2] *= (nf * slev); |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1185 ctx->chcoeffs[3] *= (nf * slev); |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1186 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1187 case AC3_OUTPUT_DOLBY: |
|
5311
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1188 nf = 1.0 / (1.0 + (2.0 * LEVEL_MINUS_3DB)); |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1189 ctx->chcoeffs[0] *= nf; |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1190 ctx->chcoeffs[1] *= nf; |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1191 ctx->chcoeffs[2] *= (nf * LEVEL_MINUS_3DB); |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1192 ctx->chcoeffs[3] *= (nf * LEVEL_MINUS_3DB); |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1193 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1194 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1195 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1196 case AC3_INPUT_3F_2R: |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1197 switch (to) { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1198 case AC3_OUTPUT_MONO: |
|
5311
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1199 nf = LEVEL_MINUS_3DB / (1.0 + clev + slev); |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1200 ctx->chcoeffs[0] *= (nf * LEVEL_MINUS_3DB); |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1201 ctx->chcoeffs[2] *= (nf * LEVEL_MINUS_3DB); |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1202 ctx->chcoeffs[1] *= (nf * clev * LEVEL_PLUS_3DB); |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1203 ctx->chcoeffs[3] *= (nf * slev * LEVEL_MINUS_3DB); |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1204 ctx->chcoeffs[4] *= (nf * slev * LEVEL_MINUS_3DB); |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1205 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1206 case AC3_OUTPUT_STEREO: |
|
5311
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1207 nf = 1.0 / (1.0 + clev + slev); |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1208 ctx->chcoeffs[0] *= nf; |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1209 ctx->chcoeffs[2] *= nf; |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1210 ctx->chcoeffs[1] *= (nf * clev); |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1211 ctx->chcoeffs[3] *= (nf * slev); |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1212 ctx->chcoeffs[4] *= (nf * slev); |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1213 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1214 case AC3_OUTPUT_DOLBY: |
|
5311
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1215 nf = 1.0 / (1.0 + (3.0 * LEVEL_MINUS_3DB)); |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1216 ctx->chcoeffs[0] *= nf; |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1217 ctx->chcoeffs[1] *= nf; |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1218 ctx->chcoeffs[1] *= (nf * LEVEL_MINUS_3DB); |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1219 ctx->chcoeffs[3] *= (nf * LEVEL_MINUS_3DB); |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1220 ctx->chcoeffs[4] *= (nf * LEVEL_MINUS_3DB); |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1221 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1222 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1223 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1224 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1225 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1226 |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1227 static inline void mix_dualmono_to_mono(AC3DecodeContext *ctx) |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1228 { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1229 int i; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1230 float (*output)[BLOCK_SIZE] = ctx->output; |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1231 |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1232 for (i = 0; i < 256; i++) |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1233 output[1][i] += output[2][i]; |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1234 memset(output[2], 0, sizeof(output[2])); |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1235 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1236 |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1237 static inline void mix_dualmono_to_stereo(AC3DecodeContext *ctx) |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1238 { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1239 int i; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1240 float tmp; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1241 float (*output)[BLOCK_SIZE] = ctx->output; |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1242 |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1243 for (i = 0; i < 256; i++) { |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1244 tmp = output[1][i] + output[2][i]; |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1245 output[1][i] = output[2][i] = tmp; |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1246 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1247 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1248 |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1249 static inline void upmix_mono_to_stereo(AC3DecodeContext *ctx) |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1250 { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1251 int i; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1252 float (*output)[BLOCK_SIZE] = ctx->output; |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1253 |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1254 for (i = 0; i < 256; i++) |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1255 output[2][i] = output[1][i]; |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1256 } |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1257 |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1258 static inline void mix_stereo_to_mono(AC3DecodeContext *ctx) |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1259 { |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1260 int i; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1261 float (*output)[BLOCK_SIZE] = ctx->output; |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1262 |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1263 for (i = 0; i < 256; i++) |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1264 output[1][i] += output[2][i]; |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1265 memset(output[2], 0, sizeof(output[2])); |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1266 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1267 |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1268 static inline void mix_3f_to_mono(AC3DecodeContext *ctx) |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1269 { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1270 int i; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1271 float (*output)[BLOCK_SIZE] = ctx->output; |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1272 |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1273 for (i = 0; i < 256; i++) |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1274 output[1][i] += (output[2][i] + output[3][i]); |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1275 memset(output[2], 0, sizeof(output[2])); |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1276 memset(output[3], 0, sizeof(output[3])); |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1277 } |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1278 |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1279 static inline void mix_3f_to_stereo(AC3DecodeContext *ctx) |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1280 { |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1281 int i; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1282 float (*output)[BLOCK_SIZE] = ctx->output; |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1283 |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1284 for (i = 0; i < 256; i++) { |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1285 output[1][i] += output[2][i]; |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1286 output[2][i] += output[3][i]; |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1287 } |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1288 memset(output[3], 0, sizeof(output[3])); |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1289 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1290 |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1291 static inline void mix_2f_1r_to_mono(AC3DecodeContext *ctx) |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1292 { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1293 int i; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1294 float (*output)[BLOCK_SIZE] = ctx->output; |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1295 |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1296 for (i = 0; i < 256; i++) |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1297 output[1][i] += (output[2][i] + output[3][i]); |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1298 memset(output[2], 0, sizeof(output[2])); |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1299 memset(output[3], 0, sizeof(output[3])); |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1300 |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1301 } |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1302 |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1303 static inline void mix_2f_1r_to_stereo(AC3DecodeContext *ctx) |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1304 { |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1305 int i; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1306 float (*output)[BLOCK_SIZE] = ctx->output; |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1307 |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1308 for (i = 0; i < 256; i++) { |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1309 output[1][i] += output[2][i]; |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1310 output[2][i] += output[3][i]; |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1311 } |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1312 memset(output[3], 0, sizeof(output[3])); |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1313 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1314 |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1315 static inline void mix_2f_1r_to_dolby(AC3DecodeContext *ctx) |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1316 { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1317 int i; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1318 float (*output)[BLOCK_SIZE] = ctx->output; |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1319 |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1320 for (i = 0; i < 256; i++) { |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1321 output[1][i] -= output[3][i]; |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1322 output[2][i] += output[3][i]; |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1323 } |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1324 memset(output[3], 0, sizeof(output[3])); |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1325 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1326 |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1327 static inline void mix_3f_1r_to_mono(AC3DecodeContext *ctx) |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1328 { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1329 int i; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1330 float (*output)[BLOCK_SIZE] = ctx->output; |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1331 |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1332 for (i = 0; i < 256; i++) |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1333 output[1][i] = (output[2][i] + output[3][i] + output[4][i]); |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1334 memset(output[2], 0, sizeof(output[2])); |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1335 memset(output[3], 0, sizeof(output[3])); |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1336 memset(output[4], 0, sizeof(output[4])); |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1337 } |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1338 |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1339 static inline void mix_3f_1r_to_stereo(AC3DecodeContext *ctx) |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1340 { |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1341 int i; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1342 float (*output)[BLOCK_SIZE] = ctx->output; |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1343 |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1344 for (i = 0; i < 256; i++) { |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1345 output[1][i] += (output[2][i] + output[4][i]); |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1346 output[2][i] += (output[3][i] + output[4][i]); |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1347 } |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1348 memset(output[3], 0, sizeof(output[3])); |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1349 memset(output[4], 0, sizeof(output[4])); |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1350 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1351 |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1352 static inline void mix_3f_1r_to_dolby(AC3DecodeContext *ctx) |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1353 { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1354 int i; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1355 float (*output)[BLOCK_SIZE] = ctx->output; |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1356 |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1357 for (i = 0; i < 256; i++) { |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1358 output[1][i] += (output[2][i] - output[4][i]); |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1359 output[2][i] += (output[3][i] + output[4][i]); |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1360 } |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1361 memset(output[3], 0, sizeof(output[3])); |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1362 memset(output[4], 0, sizeof(output[4])); |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1363 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1364 |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1365 static inline void mix_2f_2r_to_mono(AC3DecodeContext *ctx) |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1366 { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1367 int i; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1368 float (*output)[BLOCK_SIZE] = ctx->output; |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1369 |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1370 for (i = 0; i < 256; i++) |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1371 output[1][i] = (output[2][i] + output[3][i] + output[4][i]); |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1372 memset(output[2], 0, sizeof(output[2])); |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1373 memset(output[3], 0, sizeof(output[3])); |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1374 memset(output[4], 0, sizeof(output[4])); |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1375 } |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1376 |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1377 static inline void mix_2f_2r_to_stereo(AC3DecodeContext *ctx) |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1378 { |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1379 int i; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1380 float (*output)[BLOCK_SIZE] = ctx->output; |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1381 |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1382 for (i = 0; i < 256; i++) { |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1383 output[1][i] += output[3][i]; |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1384 output[2][i] += output[4][i]; |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1385 } |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1386 memset(output[3], 0, sizeof(output[3])); |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1387 memset(output[4], 0, sizeof(output[4])); |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1388 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1389 |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1390 static inline void mix_2f_2r_to_dolby(AC3DecodeContext *ctx) |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1391 { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1392 int i; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1393 float (*output)[BLOCK_SIZE] = ctx->output; |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1394 |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1395 for (i = 0; i < 256; i++) { |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1396 output[1][i] -= output[3][i]; |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1397 output[2][i] += output[4][i]; |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1398 } |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1399 memset(output[3], 0, sizeof(output[3])); |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1400 memset(output[4], 0, sizeof(output[4])); |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1401 } |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1402 |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1403 static inline void mix_3f_2r_to_mono(AC3DecodeContext *ctx) |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1404 { |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1405 int i; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1406 float (*output)[BLOCK_SIZE] = ctx->output; |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1407 |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1408 for (i = 0; i < 256; i++) |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1409 output[1][i] += (output[2][i] + output[3][i] + output[4][i] + output[5][i]); |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1410 memset(output[2], 0, sizeof(output[2])); |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1411 memset(output[3], 0, sizeof(output[3])); |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1412 memset(output[4], 0, sizeof(output[4])); |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1413 memset(output[5], 0, sizeof(output[5])); |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1414 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1415 |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1416 static inline void mix_3f_2r_to_stereo(AC3DecodeContext *ctx) |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1417 { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1418 int i; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1419 float (*output)[BLOCK_SIZE] = ctx->output; |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1420 |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1421 for (i = 0; i < 256; i++) { |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1422 output[1][i] += (output[2][i] + output[4][i]); |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1423 output[2][i] += (output[3][i] + output[5][i]); |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1424 } |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1425 memset(output[3], 0, sizeof(output[3])); |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1426 memset(output[4], 0, sizeof(output[4])); |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1427 memset(output[5], 0, sizeof(output[5])); |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1428 } |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1429 |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1430 static inline void mix_3f_2r_to_dolby(AC3DecodeContext *ctx) |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1431 { |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1432 int i; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1433 float (*output)[BLOCK_SIZE] = ctx->output; |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1434 |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1435 for (i = 0; i < 256; i++) { |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1436 output[1][i] += (output[2][i] - output[4][i] - output[5][i]); |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1437 output[2][i] += (output[3][i] + output[4][i] + output[5][i]); |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1438 } |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1439 memset(output[3], 0, sizeof(output[3])); |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1440 memset(output[4], 0, sizeof(output[4])); |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1441 memset(output[5], 0, sizeof(output[5])); |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
1442 } |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
1443 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1444 static void do_downmix(AC3DecodeContext *ctx) |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
1445 { |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1446 int from = ctx->acmod; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1447 int to = ctx->blkoutput; |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
1448 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1449 switch (from) { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1450 case AC3_INPUT_DUALMONO: |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1451 switch (to) { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1452 case AC3_OUTPUT_MONO: |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1453 mix_dualmono_to_mono(ctx); |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1454 break; |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1455 case AC3_OUTPUT_STEREO: /* We assume that sum of both mono channels is requested */ |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1456 mix_dualmono_to_stereo(ctx); |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1457 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1458 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1459 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1460 case AC3_INPUT_MONO: |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1461 switch (to) { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1462 case AC3_OUTPUT_STEREO: |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1463 upmix_mono_to_stereo(ctx); |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1464 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1465 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1466 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1467 case AC3_INPUT_STEREO: |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1468 switch (to) { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1469 case AC3_OUTPUT_MONO: |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1470 mix_stereo_to_mono(ctx); |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1471 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1472 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1473 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1474 case AC3_INPUT_3F: |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1475 switch (to) { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1476 case AC3_OUTPUT_MONO: |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1477 mix_3f_to_mono(ctx); |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1478 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1479 case AC3_OUTPUT_STEREO: |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1480 mix_3f_to_stereo(ctx); |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1481 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1482 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1483 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1484 case AC3_INPUT_2F_1R: |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1485 switch (to) { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1486 case AC3_OUTPUT_MONO: |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1487 mix_2f_1r_to_mono(ctx); |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1488 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1489 case AC3_OUTPUT_STEREO: |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1490 mix_2f_1r_to_stereo(ctx); |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1491 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1492 case AC3_OUTPUT_DOLBY: |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1493 mix_2f_1r_to_dolby(ctx); |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1494 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1495 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1496 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1497 case AC3_INPUT_3F_1R: |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1498 switch (to) { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1499 case AC3_OUTPUT_MONO: |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1500 mix_3f_1r_to_mono(ctx); |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1501 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1502 case AC3_OUTPUT_STEREO: |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1503 mix_3f_1r_to_stereo(ctx); |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1504 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1505 case AC3_OUTPUT_DOLBY: |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1506 mix_3f_1r_to_dolby(ctx); |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1507 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1508 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1509 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1510 case AC3_INPUT_2F_2R: |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1511 switch (to) { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1512 case AC3_OUTPUT_MONO: |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1513 mix_2f_2r_to_mono(ctx); |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1514 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1515 case AC3_OUTPUT_STEREO: |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1516 mix_2f_2r_to_stereo(ctx); |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1517 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1518 case AC3_OUTPUT_DOLBY: |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1519 mix_2f_2r_to_dolby(ctx); |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1520 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1521 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1522 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1523 case AC3_INPUT_3F_2R: |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1524 switch (to) { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1525 case AC3_OUTPUT_MONO: |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1526 mix_3f_2r_to_mono(ctx); |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1527 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1528 case AC3_OUTPUT_STEREO: |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1529 mix_3f_2r_to_stereo(ctx); |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1530 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1531 case AC3_OUTPUT_DOLBY: |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1532 mix_3f_2r_to_dolby(ctx); |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1533 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1534 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1535 break; |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
1536 } |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1537 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1538 |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1539 static void dump_floats(const char *name, int prec, const float *tab, int n) |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1540 { |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1541 int i; |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1542 |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1543 av_log(NULL, AV_LOG_INFO, "%s[%d]:\n", name, n); |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1544 for(i=0;i<n;i++) { |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1545 if ((i & 7) == 0) |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1546 av_log(NULL, AV_LOG_INFO, "%4d: ", i); |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1547 av_log(NULL, AV_LOG_INFO, " %8.*f", prec, tab[i]); |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1548 if ((i & 7) == 7) |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1549 av_log(NULL, AV_LOG_INFO, "\n"); |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1550 } |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1551 if ((i & 7) != 0) |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1552 av_log(NULL, AV_LOG_INFO, "\n"); |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1553 } |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1554 |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1555 #define CMUL(pre, pim, are, aim, bre, bim) \ |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1556 {\ |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1557 float _are = (are);\ |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1558 float _aim = (aim);\ |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1559 float _bre = (bre);\ |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1560 float _bim = (bim);\ |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1561 (pre) = _are * _bre - _aim * _bim;\ |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1562 (pim) = _are * _bim + _aim * _bre;\ |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1563 } |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1564 |
|
5311
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1565 static void do_imdct_256(AC3DecodeContext *ctx, int chindex) |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1566 { |
|
5311
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1567 int k; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1568 float x1[128], x2[128]; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1569 |
|
5311
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1570 for (k = 0; k < N / 4; k++) { |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1571 x1[k] = ctx->transform_coeffs[chindex][2 * k]; |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1572 x2[k] = ctx->transform_coeffs[chindex][2 * k + 1]; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1573 } |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1574 |
|
5311
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1575 ff_imdct_calc(&ctx->imdct_256, ctx->tmp_output, x1, ctx->tmp_imdct); |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1576 ff_imdct_calc(&ctx->imdct_256, ctx->tmp_output + 256, x2, ctx->tmp_imdct); |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1577 |
|
5311
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1578 for (k = 0; k < N / 2; k++) { |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1579 ctx->output[chindex][k] = ctx->tmp_output[k] * window[k] + ctx->delay[chindex][k]; |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1580 //dump_floats("samples", 10, ctx->output[chindex], 256); |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1581 ctx->delay[chindex][k] = ctx->tmp_output[N / 2 + k] * window[255 - k]; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1582 } |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1583 } |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1584 |
|
5311
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1585 static void do_imdct_512(AC3DecodeContext *ctx, int chindex) |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1586 { |
|
5311
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1587 int k; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1588 |
|
5311
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1589 ff_imdct_calc(&ctx->imdct_512, ctx->tmp_output, |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1590 ctx->transform_coeffs[chindex], ctx->tmp_imdct); |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1591 //ff_imdct_calc_ac3_512(&ctx->imdct_512, ctx->tmp_output, ctx->transform_coeffs[chindex], |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1592 // ctx->tmp_imdct, window); |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1593 |
|
5311
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1594 for (k = 0; k < N / 2; k++) { |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1595 ctx->output[chindex][k] = ctx->tmp_output[k] * window[k] + ctx->delay[chindex][k]; |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1596 //dump_floats("samples", 10, ctx->output[chindex], 256); |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1597 ctx->delay[chindex][k] = ctx->tmp_output[N / 2 + k] * window[255 - k]; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1598 } |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1599 } |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1600 |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1601 static inline void do_imdct(AC3DecodeContext *ctx) |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1602 { |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1603 int i; |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1604 |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1605 if (ctx->blkoutput & AC3_OUTPUT_LFEON) { |
|
5311
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1606 do_imdct_512(ctx, 0); |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1607 } |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
1608 for (i = 0; i < ctx->nfchans; i++) { |
|
5311
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1609 if ((ctx->blksw >> i) & 1) |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1610 do_imdct_256(ctx, i + 1); |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1611 else |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1612 do_imdct_512(ctx, i + 1); |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1613 } |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1614 } |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1615 |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1616 static int ac3_parse_audio_block(AC3DecodeContext * ctx) |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1617 { |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1618 int nfchans = ctx->nfchans; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1619 int acmod = ctx->acmod; |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1620 int i, bnd, rbnd, seg, grpsize; |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1621 GetBitContext *gb = &ctx->gb; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1622 int bit_alloc_flags = 0; |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
1623 float drange; |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1624 uint8_t *dexps; |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
1625 int mstrcplco, cplcoexp, cplcomant; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1626 int dynrng, chbwcod, ngrps, cplabsexp, skipl; |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1627 |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1628 for (i = 0; i < 5; i++) |
|
5311
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1629 ctx->chcoeffs[i] = 2.0; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1630 |
|
5312
2c875e6274d5
AC-3 decoder, soc revision 52, Aug 16 22:45:07 2006 UTC by cloud9
jbr
parents:
5311
diff
changeset
|
1631 ctx->blksw = 0; |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1632 for (i = 0; i < nfchans; i++) /*block switch flag */ |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1633 ctx->blksw |= get_bits1(gb) << i; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1634 |
|
5312
2c875e6274d5
AC-3 decoder, soc revision 52, Aug 16 22:45:07 2006 UTC by cloud9
jbr
parents:
5311
diff
changeset
|
1635 ctx->dithflag = 0; |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1636 for (i = 0; i < nfchans; i++) /* dithering flag */ |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1637 ctx->dithflag |= get_bits1(gb) << i; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1638 |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1639 if (get_bits1(gb)) { /* dynamic range */ |
|
5311
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1640 dynrng = get_sbits(gb, 8); |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1641 drange = ((((dynrng & 0x1f) | 0x20) << 13) * scale_factors[3 - (dynrng >> 5)]); |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1642 for (i = 0; i < nfchans; i++) |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1643 ctx->chcoeffs[i] *= drange; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1644 } |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1645 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1646 if (acmod == 0x00 && get_bits1(gb)) { /* dynamic range 1+1 mode */ |
|
5311
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1647 dynrng = get_sbits(gb, 8); |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1648 drange = ((((dynrng & 0x1f) | 0x20) << 13) * scale_factors[3 - (dynrng >> 5)]); |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1649 ctx->chcoeffs[1] *= drange; |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
1650 } |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1651 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1652 get_downmix_coeffs(ctx); |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1653 |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1654 if (get_bits1(gb)) { /* coupling strategy */ |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1655 ctx->cplinu = get_bits1(gb); |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
1656 ctx->cplbndstrc = 0; |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
1657 ctx->chincpl = 0; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1658 if (ctx->cplinu) { /* coupling in use */ |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1659 for (i = 0; i < nfchans; i++) |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1660 ctx->chincpl |= get_bits1(gb) << i; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1661 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1662 if (acmod == 0x02) |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1663 ctx->phsflginu = get_bits1(gb); //phase flag in use |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1664 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1665 ctx->cplbegf = get_bits(gb, 4); |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1666 ctx->cplendf = get_bits(gb, 4); |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1667 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1668 if (3 + ctx->cplendf - ctx->cplbegf < 0) { |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1669 av_log(NULL, AV_LOG_ERROR, "cplendf = %d < cplbegf = %d\n", ctx->cplendf, ctx->cplbegf); |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1670 return -1; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1671 } |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1672 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1673 ctx->ncplbnd = ctx->ncplsubnd = 3 + ctx->cplendf - ctx->cplbegf; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1674 ctx->cplstrtmant = ctx->cplbegf * 12 + 37; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1675 ctx->cplendmant = ctx->cplendf * 12 + 73; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1676 for (i = 0; i < ctx->ncplsubnd - 1; i++) /* coupling band structure */ |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1677 if (get_bits1(gb)) { |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1678 ctx->cplbndstrc |= 1 << i; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1679 ctx->ncplbnd--; |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1680 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1681 } |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
1682 } |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1683 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1684 if (ctx->cplinu) { |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1685 ctx->cplcoe = 0; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1686 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1687 for (i = 0; i < nfchans; i++) |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1688 if ((ctx->chincpl) >> i & 1) |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1689 if (get_bits1(gb)) { /* coupling co-ordinates */ |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
1690 ctx->cplcoe |= 1 << i; |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1691 mstrcplco = 3 * get_bits(gb, 2); |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1692 for (bnd = 0; bnd < ctx->ncplbnd; bnd++) { |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1693 cplcoexp = get_bits(gb, 4); |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1694 cplcomant = get_bits(gb, 4); |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1695 if (cplcoexp == 15) |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1696 cplcomant <<= 14; |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1697 else |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1698 cplcomant = (cplcomant | 0x10) << 13; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1699 ctx->cplco[i][bnd] = cplcomant * scale_factors[cplcoexp + mstrcplco]; |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1700 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1701 } |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1702 |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
1703 if (acmod == 0x02 && ctx->phsflginu && (ctx->cplcoe & 1 || ctx->cplcoe & 2)) |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1704 for (bnd = 0; bnd < ctx->ncplbnd; bnd++) |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1705 if (get_bits1(gb)) |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1706 ctx->cplco[1][bnd] = -ctx->cplco[1][bnd]; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1707 } |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1708 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1709 if (acmod == 0x02) {/* rematrixing */ |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1710 ctx->rematstr = get_bits1(gb); |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1711 if (ctx->rematstr) { |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1712 ctx->rematflg = 0; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1713 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1714 if (!(ctx->cplinu) || ctx->cplbegf > 2) |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1715 for (rbnd = 0; rbnd < 4; rbnd++) |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1716 ctx->rematflg |= get_bits1(gb) << rbnd; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1717 if (ctx->cplbegf > 0 && ctx->cplbegf <= 2 && ctx->cplinu) |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1718 for (rbnd = 0; rbnd < 3; rbnd++) |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1719 ctx->rematflg |= get_bits1(gb) << rbnd; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1720 if (ctx->cplbegf == 0 && ctx->cplinu) |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1721 for (rbnd = 0; rbnd < 2; rbnd++) |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1722 ctx->rematflg |= get_bits1(gb) << rbnd; |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1723 } |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
1724 } |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1725 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1726 ctx->cplexpstr = AC3_EXPSTR_REUSE; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1727 ctx->lfeexpstr = AC3_EXPSTR_REUSE; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1728 if (ctx->cplinu) /* coupling exponent strategy */ |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1729 ctx->cplexpstr = get_bits(gb, 2); |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1730 for (i = 0; i < nfchans; i++) /* channel exponent strategy */ |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1731 ctx->chexpstr[i] = get_bits(gb, 2); |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1732 if (ctx->lfeon) /* lfe exponent strategy */ |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1733 ctx->lfeexpstr = get_bits1(gb); |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1734 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1735 for (i = 0; i < nfchans; i++) /* channel bandwidth code */ |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1736 if (ctx->chexpstr[i] != AC3_EXPSTR_REUSE) { |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1737 if ((ctx->chincpl >> i) & 1) |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1738 ctx->endmant[i] = ctx->cplstrtmant; |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1739 else { |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1740 chbwcod = get_bits(gb, 6); |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1741 if (chbwcod > 60) { |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1742 av_log(NULL, AV_LOG_ERROR, "chbwcod = %d > 60", chbwcod); |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1743 return -1; |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1744 } |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1745 ctx->endmant[i] = chbwcod * 3 + 73; |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1746 } |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1747 } |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1748 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1749 if (ctx->cplexpstr != AC3_EXPSTR_REUSE) {/* coupling exponents */ |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
1750 bit_alloc_flags = 64; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1751 cplabsexp = get_bits(gb, 4) << 1; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1752 ngrps = (ctx->cplendmant - ctx->cplstrtmant) / (3 << (ctx->cplexpstr - 1)); |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1753 if (decode_exponents(gb, ctx->cplexpstr, ngrps, cplabsexp, ctx->dcplexps + ctx->cplstrtmant)) { |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1754 av_log(NULL, AV_LOG_ERROR, "error decoding coupling exponents\n"); |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1755 return -1; |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1756 } |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1757 } |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1758 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1759 for (i = 0; i < nfchans; i++) /* fbw channel exponents */ |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1760 if (ctx->chexpstr[i] != AC3_EXPSTR_REUSE) { |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1761 bit_alloc_flags |= 1 << i; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1762 grpsize = 3 << (ctx->chexpstr[i] - 1); |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1763 ngrps = (ctx->endmant[i] + grpsize - 4) / grpsize; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1764 dexps = ctx->dexps[i]; |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1765 dexps[0] = get_bits(gb, 4); |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1766 if (decode_exponents(gb, ctx->chexpstr[i], ngrps, dexps[0], dexps + 1)) { |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1767 av_log(NULL, AV_LOG_ERROR, "error decoding channel %d exponents\n", i); |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1768 return -1; |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1769 } |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1770 skip_bits(gb, 2); /* skip gainrng */ |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1771 } |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1772 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1773 if (ctx->lfeexpstr != AC3_EXPSTR_REUSE) { /* lfe exponents */ |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1774 bit_alloc_flags |= 32; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1775 ctx->dlfeexps[0] = get_bits(gb, 4); |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1776 if (decode_exponents(gb, ctx->lfeexpstr, 2, ctx->dlfeexps[0], ctx->dlfeexps + 1)) { |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1777 av_log(NULL, AV_LOG_ERROR, "error decoding lfe exponents\n"); |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1778 return -1; |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1779 } |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1780 } |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1781 |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1782 if (get_bits1(gb)) { /* bit allocation information */ |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
1783 bit_alloc_flags = 127; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1784 ctx->sdcycod = get_bits(gb, 2); |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1785 ctx->fdcycod = get_bits(gb, 2); |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1786 ctx->sgaincod = get_bits(gb, 2); |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1787 ctx->dbpbcod = get_bits(gb, 2); |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1788 ctx->floorcod = get_bits(gb, 3); |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1789 } |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1790 |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1791 if (get_bits1(gb)) { /* snroffset */ |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
1792 bit_alloc_flags = 127; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1793 ctx->csnroffst = get_bits(gb, 6); |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1794 if (ctx->cplinu) { /* couling fine snr offset and fast gain code */ |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1795 ctx->cplfsnroffst = get_bits(gb, 4); |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1796 ctx->cplfgaincod = get_bits(gb, 3); |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1797 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1798 for (i = 0; i < nfchans; i++) { /* channel fine snr offset and fast gain code */ |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1799 ctx->fsnroffst[i] = get_bits(gb, 4); |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1800 ctx->fgaincod[i] = get_bits(gb, 3); |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1801 } |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1802 if (ctx->lfeon) { /* lfe fine snr offset and fast gain code */ |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1803 ctx->lfefsnroffst = get_bits(gb, 4); |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1804 ctx->lfefgaincod = get_bits(gb, 3); |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1805 } |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
1806 } |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1807 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1808 if (ctx->cplinu && get_bits1(gb)) { /* coupling leak information */ |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1809 bit_alloc_flags |= 64; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1810 ctx->cplfleak = get_bits(gb, 3); |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1811 ctx->cplsleak = get_bits(gb, 3); |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1812 } |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1813 |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1814 if (get_bits1(gb)) { /* delta bit allocation information */ |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
1815 bit_alloc_flags = 127; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1816 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1817 if (ctx->cplinu) { |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1818 ctx->cpldeltbae = get_bits(gb, 2); |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1819 if (ctx->cpldeltbae == AC3_DBASTR_RESERVED) { |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1820 av_log(NULL, AV_LOG_ERROR, "coupling delta bit allocation strategy reserved\n"); |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1821 return -1; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1822 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1823 } |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1824 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1825 for (i = 0; i < nfchans; i++) { |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1826 ctx->deltbae[i] = get_bits(gb, 2); |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1827 if (ctx->deltbae[i] == AC3_DBASTR_RESERVED) { |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1828 av_log(NULL, AV_LOG_ERROR, "delta bit allocation strategy reserved\n"); |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1829 return -1; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1830 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1831 } |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1832 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1833 if (ctx->cplinu) |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1834 if (ctx->cpldeltbae == AC3_DBASTR_NEW) { /*coupling delta offset, len and bit allocation */ |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1835 ctx->cpldeltnseg = get_bits(gb, 3); |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1836 for (seg = 0; seg <= ctx->cpldeltnseg; seg++) { |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1837 ctx->cpldeltoffst[seg] = get_bits(gb, 5); |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1838 ctx->cpldeltlen[seg] = get_bits(gb, 4); |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1839 ctx->cpldeltba[seg] = get_bits(gb, 3); |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1840 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1841 } |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1842 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1843 for (i = 0; i < nfchans; i++) |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1844 if (ctx->deltbae[i] == AC3_DBASTR_NEW) {/*channel delta offset, len and bit allocation */ |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1845 ctx->deltnseg[i] = get_bits(gb, 3); |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1846 for (seg = 0; seg <= ctx->deltnseg[i]; seg++) { |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1847 ctx->deltoffst[i][seg] = get_bits(gb, 5); |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1848 ctx->deltlen[i][seg] = get_bits(gb, 4); |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1849 ctx->deltba[i][seg] = get_bits(gb, 3); |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1850 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1851 } |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
1852 } |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1853 |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
1854 if (bit_alloc_flags) { |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
1855 if (is_snr_offsets_zero(ctx)) { |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
1856 memset(ctx->cplbap, 0, sizeof (ctx->cplbap)); |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
1857 memset(ctx->lfebap, 0, sizeof (ctx->lfebap)); |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
1858 for (i = 0; i < nfchans; i++) |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
1859 memset(ctx->bap[i], 0, sizeof(ctx->bap[i])); |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
1860 } else { |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
1861 if (ctx->chincpl && (bit_alloc_flags & 64)) |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
1862 do_bit_allocation(ctx, 5); |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
1863 for (i = 0; i < nfchans; i++) |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
1864 if ((bit_alloc_flags >> i) & 1) |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
1865 do_bit_allocation(ctx, i); |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
1866 if (ctx->lfeon && (bit_alloc_flags & 32)) |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
1867 do_bit_allocation(ctx, 6); |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
1868 } |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
1869 } |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1870 |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1871 if (get_bits1(gb)) { /* unused dummy data */ |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1872 skipl = get_bits(gb, 9); |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1873 while(skipl--) |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1874 skip_bits(gb, 8); |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1875 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1876 /* unpack the transform coefficients |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1877 * * this also uncouples channels if coupling is in use. |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1878 */ |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1879 if (get_transform_coeffs(ctx)) { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1880 av_log(NULL, AV_LOG_ERROR, "Error in routine get_transform_coeffs\n"); |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1881 return -1; |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
1882 } |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1883 /*for (i = 0; i < nfchans; i++) |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1884 dump_floats("channel transform coefficients", 10, ctx->transform_coeffs[i + 1], BLOCK_SIZE);*/ |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1885 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1886 /* recover coefficients if rematrixing is in use */ |
|
5312
2c875e6274d5
AC-3 decoder, soc revision 52, Aug 16 22:45:07 2006 UTC by cloud9
jbr
parents:
5311
diff
changeset
|
1887 if (ctx->rematflg) |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1888 do_rematrixing(ctx); |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1889 |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1890 do_imdct(ctx); |
|
5307
1bcccd2de20d
AC-3 decoder, soc revision 33, Jul 17 12:13:40 2006 UTC by cloud9
jbr
parents:
5306
diff
changeset
|
1891 /*for(i = 0; i < nfchans; i++) |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1892 dump_floats("channel output", 10, ctx->output[i + 1], BLOCK_SIZE);*/ |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1893 |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1894 do_downmix(ctx); |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1895 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1896 return 0; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1897 } |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
1898 |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1899 static inline int16_t convert(float f) |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1900 { |
|
5311
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1901 if (f >= 1.0) |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1902 return 32767; |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1903 else if (f <= -1.0) |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1904 return -32768; |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1905 else |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1906 return (lrintf(f * 32767.0)); |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1907 } |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1908 |
|
5308
82b41f5a86ef
AC-3 decoder, soc revision 34, Jul 18 14:27:54 2006 UTC by cloud9
jbr
parents:
5307
diff
changeset
|
1909 static int frame_count = 0; |
|
82b41f5a86ef
AC-3 decoder, soc revision 34, Jul 18 14:27:54 2006 UTC by cloud9
jbr
parents:
5307
diff
changeset
|
1910 |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1911 static int ac3_decode_frame(AVCodecContext * avctx, void *data, int *data_size, uint8_t *buf, int buf_size) |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1912 { |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1913 AC3DecodeContext *ctx = (AC3DecodeContext *)avctx->priv_data; |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1914 int frame_start; |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1915 int16_t *out_samples = (int16_t *)data; |
|
5313
4bd60d3bab7e
AC-3 decoder, soc revision 53, Aug 17 08:53:44 2006 UTC by cloud9
jbr
parents:
5312
diff
changeset
|
1916 int i, j, k, value; |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
1917 |
|
5308
82b41f5a86ef
AC-3 decoder, soc revision 34, Jul 18 14:27:54 2006 UTC by cloud9
jbr
parents:
5307
diff
changeset
|
1918 av_log(NULL, AV_LOG_INFO, "decoding frame %d buf_size = %d\n", frame_count++, buf_size); |
|
82b41f5a86ef
AC-3 decoder, soc revision 34, Jul 18 14:27:54 2006 UTC by cloud9
jbr
parents:
5307
diff
changeset
|
1919 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1920 //Synchronize the frame. |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1921 frame_start = ac3_synchronize(buf, buf_size); |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1922 if (frame_start == -1) { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1923 av_log(avctx, AV_LOG_ERROR, "frame is not synchronized\n"); |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1924 *data_size = 0; |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1925 return buf_size; |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1926 } |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
1927 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1928 //Initialize the GetBitContext with the start of valid AC3 Frame. |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1929 init_get_bits(&(ctx->gb), buf + frame_start, (buf_size - frame_start) * 8); |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1930 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1931 //Parse the syncinfo. |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1932 //If 'fscod' or 'bsid' is not valid the decoder shall mute as per the standard. |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1933 if (!ac3_parse_sync_info(ctx)) { |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1934 av_log(avctx, AV_LOG_ERROR, "\n"); |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1935 *data_size = 0; |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1936 return buf_size; |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1937 } |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
1938 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1939 //Parse the BSI. |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1940 //If 'bsid' is not valid decoder shall not decode the audio as per the standard. |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1941 ac3_parse_bsi(ctx); |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
1942 |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1943 avctx->sample_rate = ctx->sampling_rate; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1944 avctx->bit_rate = ctx->bit_rate; |
|
5311
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1945 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1946 if (avctx->channels == 0) { |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1947 ctx->blkoutput |= AC3_OUTPUT_UNMODIFIED; |
|
5311
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1948 if (ctx->lfeon) |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1949 ctx->blkoutput |= AC3_OUTPUT_LFEON; |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1950 avctx->channels = ctx->nfchans + ctx->lfeon; |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1951 } |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1952 else if (avctx->channels == 1) |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1953 ctx->blkoutput |= AC3_OUTPUT_MONO; |
|
5311
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1954 else if (avctx->channels == 2) { |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1955 if (ctx->dsurmod == 0x02) |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1956 ctx->blkoutput |= AC3_OUTPUT_DOLBY; |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1957 else |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1958 ctx->blkoutput |= AC3_OUTPUT_STEREO; |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1959 } |
|
5311
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1960 else { |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1961 if (avctx->channels < (ctx->nfchans + ctx->lfeon)) |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1962 av_log(avctx, AV_LOG_INFO, "ac3_decoder: AC3 Source Channels Are Less Then Specified %d: Output to %d Channels\n",avctx->channels, ctx->nfchans + ctx->lfeon); |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1963 ctx->blkoutput |= AC3_OUTPUT_UNMODIFIED; |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1964 if (ctx->lfeon) |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1965 ctx->blkoutput |= AC3_OUTPUT_LFEON; |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1966 avctx->channels = ctx->nfchans + ctx->lfeon; |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
1967 } |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
1968 |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1969 av_log(avctx, AV_LOG_INFO, "channels = %d \t bit rate = %d \t sampling rate = %d \n", avctx->channels, avctx->bit_rate * 1000, avctx->sample_rate); |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1970 |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1971 //Parse the Audio Blocks. |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1972 for (i = 0; i < AUDIO_BLOCKS; i++) { |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1973 if (ac3_parse_audio_block(ctx)) { |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1974 av_log(avctx, AV_LOG_ERROR, "error parsing the audio block\n"); |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1975 *data_size = 0; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1976 return ctx->frame_size; |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1977 } |
|
5308
82b41f5a86ef
AC-3 decoder, soc revision 34, Jul 18 14:27:54 2006 UTC by cloud9
jbr
parents:
5307
diff
changeset
|
1978 for (k = 0; k < BLOCK_SIZE; k++) { |
|
5311
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1979 j = (ctx->blkoutput & AC3_OUTPUT_LFEON) ? 0 : 1; |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1980 for (; j <= avctx->channels; j++) { |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1981 value = convert(ctx->output[j][k]); |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1982 *(out_samples++) = value; |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1983 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1984 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1985 } |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1986 *data_size = AUDIO_BLOCKS * BLOCK_SIZE * avctx->channels * sizeof (int16_t); |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1987 return ctx->frame_size; |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
1988 } |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1989 |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1990 static int ac3_decode_end(AVCodecContext *ctx) |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1991 { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1992 return 0; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1993 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1994 |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1995 AVCodec lgpl_ac3_decoder = { |
|
5315
31033309ebc9
AC-3 decoder, soc revision 55, Aug 17 12:25:24 2006 UTC by cloud9
jbr
parents:
5314
diff
changeset
|
1996 .name = "ac3", |
|
31033309ebc9
AC-3 decoder, soc revision 55, Aug 17 12:25:24 2006 UTC by cloud9
jbr
parents:
5314
diff
changeset
|
1997 .type = CODEC_TYPE_AUDIO, |
|
31033309ebc9
AC-3 decoder, soc revision 55, Aug 17 12:25:24 2006 UTC by cloud9
jbr
parents:
5314
diff
changeset
|
1998 .id = CODEC_ID_AC3, |
|
31033309ebc9
AC-3 decoder, soc revision 55, Aug 17 12:25:24 2006 UTC by cloud9
jbr
parents:
5314
diff
changeset
|
1999 .priv_data_size = sizeof (AC3DecodeContext), |
|
31033309ebc9
AC-3 decoder, soc revision 55, Aug 17 12:25:24 2006 UTC by cloud9
jbr
parents:
5314
diff
changeset
|
2000 .init = ac3_decode_init, |
|
31033309ebc9
AC-3 decoder, soc revision 55, Aug 17 12:25:24 2006 UTC by cloud9
jbr
parents:
5314
diff
changeset
|
2001 .close = ac3_decode_end, |
|
31033309ebc9
AC-3 decoder, soc revision 55, Aug 17 12:25:24 2006 UTC by cloud9
jbr
parents:
5314
diff
changeset
|
2002 .decode = ac3_decode_frame, |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
2003 }; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
2004 |
