Mercurial > libavcodec.hg
annotate ac3dec.c @ 5327:de0e893ef264 libavcodec
Remove redundant assignment of CODEC_ID_BMP.
patch by mark cox melbournemark+ffmpeg _at_ gmail.com
thread: [PATCH] Remove unessesary assignment of CODEC_ID_BMP
date: Mon, 9 Jul 2007 20:12:28 +1000
| author | aurel |
|---|---|
| date | Sat, 14 Jul 2007 17:14:16 +0000 |
| parents | 923aacd40ee8 |
| children | 5f83f09bd748 |
| 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 * |
|
5323
4ba6d8132f36
AC-3 decoder, soc revision 109, Sep 22 22:42:54 2006 UTC by banan
jbr
parents:
5322
diff
changeset
|
10 * For exponent decoding the code is inspired by the code in liba52 by |
|
4ba6d8132f36
AC-3 decoder, soc revision 109, Sep 22 22:42:54 2006 UTC by banan
jbr
parents:
5322
diff
changeset
|
11 * Michel Lespinasse and Aaron Holtzman. |
|
5316
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 * |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
16 * 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
|
17 * 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
|
18 * |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
19 * This library is free software; you can redistribute it and/or |
| 5326 | 20 * modify it under the terms of the GNU General Public |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
21 * 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
|
22 * 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
|
23 * |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
24 * 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
|
25 * 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
|
26 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| 5326 | 27 * General Public License for more details. |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
28 * |
| 5326 | 29 * You should have received a copy of the GNU General Public |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
30 * 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
|
31 * 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
|
32 */ |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
33 |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
34 #include <stdio.h> |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
35 #include <stddef.h> |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
36 #include <math.h> |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
37 #include <string.h> |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
38 |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
39 #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
|
40 |
|
5315
31033309ebc9
AC-3 decoder, soc revision 55, Aug 17 12:25:24 2006 UTC by cloud9
jbr
parents:
5314
diff
changeset
|
41 #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
|
42 #include "ac3tab.h" |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
43 #include "bitstream.h" |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
44 #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
|
45 |
|
5325
0d963101e0d7
AC-3 decoder, soc revision 402, Jul 14 13:45:14 2007 UTC by jbr
jbr
parents:
5324
diff
changeset
|
46 static const int nfchans_tbl[8] = { 2, 1, 2, 3, 3, 4, 4, 5 }; |
|
0d963101e0d7
AC-3 decoder, soc revision 402, Jul 14 13:45:14 2007 UTC by jbr
jbr
parents:
5324
diff
changeset
|
47 |
|
0d963101e0d7
AC-3 decoder, soc revision 402, Jul 14 13:45:14 2007 UTC by jbr
jbr
parents:
5324
diff
changeset
|
48 /* table for exponent to scale_factor mapping |
|
0d963101e0d7
AC-3 decoder, soc revision 402, Jul 14 13:45:14 2007 UTC by jbr
jbr
parents:
5324
diff
changeset
|
49 * scale_factor[i] = 2 ^ -(i + 15) |
|
0d963101e0d7
AC-3 decoder, soc revision 402, Jul 14 13:45:14 2007 UTC by jbr
jbr
parents:
5324
diff
changeset
|
50 */ |
|
0d963101e0d7
AC-3 decoder, soc revision 402, Jul 14 13:45:14 2007 UTC by jbr
jbr
parents:
5324
diff
changeset
|
51 static float scale_factors[25]; |
|
0d963101e0d7
AC-3 decoder, soc revision 402, Jul 14 13:45:14 2007 UTC by jbr
jbr
parents:
5324
diff
changeset
|
52 |
|
0d963101e0d7
AC-3 decoder, soc revision 402, Jul 14 13:45:14 2007 UTC by jbr
jbr
parents:
5324
diff
changeset
|
53 static int16_t psdtab[25]; |
|
0d963101e0d7
AC-3 decoder, soc revision 402, Jul 14 13:45:14 2007 UTC by jbr
jbr
parents:
5324
diff
changeset
|
54 |
|
0d963101e0d7
AC-3 decoder, soc revision 402, Jul 14 13:45:14 2007 UTC by jbr
jbr
parents:
5324
diff
changeset
|
55 static int8_t exp_1[128]; |
|
0d963101e0d7
AC-3 decoder, soc revision 402, Jul 14 13:45:14 2007 UTC by jbr
jbr
parents:
5324
diff
changeset
|
56 static int8_t exp_2[128]; |
|
0d963101e0d7
AC-3 decoder, soc revision 402, Jul 14 13:45:14 2007 UTC by jbr
jbr
parents:
5324
diff
changeset
|
57 static int8_t exp_3[128]; |
|
0d963101e0d7
AC-3 decoder, soc revision 402, Jul 14 13:45:14 2007 UTC by jbr
jbr
parents:
5324
diff
changeset
|
58 |
|
0d963101e0d7
AC-3 decoder, soc revision 402, Jul 14 13:45:14 2007 UTC by jbr
jbr
parents:
5324
diff
changeset
|
59 static int16_t l3_quantizers_1[32]; |
|
0d963101e0d7
AC-3 decoder, soc revision 402, Jul 14 13:45:14 2007 UTC by jbr
jbr
parents:
5324
diff
changeset
|
60 static int16_t l3_quantizers_2[32]; |
|
0d963101e0d7
AC-3 decoder, soc revision 402, Jul 14 13:45:14 2007 UTC by jbr
jbr
parents:
5324
diff
changeset
|
61 static int16_t l3_quantizers_3[32]; |
|
0d963101e0d7
AC-3 decoder, soc revision 402, Jul 14 13:45:14 2007 UTC by jbr
jbr
parents:
5324
diff
changeset
|
62 |
|
0d963101e0d7
AC-3 decoder, soc revision 402, Jul 14 13:45:14 2007 UTC by jbr
jbr
parents:
5324
diff
changeset
|
63 static int16_t l5_quantizers_1[128]; |
|
0d963101e0d7
AC-3 decoder, soc revision 402, Jul 14 13:45:14 2007 UTC by jbr
jbr
parents:
5324
diff
changeset
|
64 static int16_t l5_quantizers_2[128]; |
|
0d963101e0d7
AC-3 decoder, soc revision 402, Jul 14 13:45:14 2007 UTC by jbr
jbr
parents:
5324
diff
changeset
|
65 static int16_t l5_quantizers_3[128]; |
|
0d963101e0d7
AC-3 decoder, soc revision 402, Jul 14 13:45:14 2007 UTC by jbr
jbr
parents:
5324
diff
changeset
|
66 |
|
0d963101e0d7
AC-3 decoder, soc revision 402, Jul 14 13:45:14 2007 UTC by jbr
jbr
parents:
5324
diff
changeset
|
67 static int16_t l7_quantizers[7]; |
|
0d963101e0d7
AC-3 decoder, soc revision 402, Jul 14 13:45:14 2007 UTC by jbr
jbr
parents:
5324
diff
changeset
|
68 |
|
0d963101e0d7
AC-3 decoder, soc revision 402, Jul 14 13:45:14 2007 UTC by jbr
jbr
parents:
5324
diff
changeset
|
69 static int16_t l11_quantizers_1[128]; |
|
0d963101e0d7
AC-3 decoder, soc revision 402, Jul 14 13:45:14 2007 UTC by jbr
jbr
parents:
5324
diff
changeset
|
70 static int16_t l11_quantizers_2[128]; |
|
0d963101e0d7
AC-3 decoder, soc revision 402, Jul 14 13:45:14 2007 UTC by jbr
jbr
parents:
5324
diff
changeset
|
71 |
|
0d963101e0d7
AC-3 decoder, soc revision 402, Jul 14 13:45:14 2007 UTC by jbr
jbr
parents:
5324
diff
changeset
|
72 static int16_t l15_quantizers[15]; |
|
0d963101e0d7
AC-3 decoder, soc revision 402, Jul 14 13:45:14 2007 UTC by jbr
jbr
parents:
5324
diff
changeset
|
73 |
|
0d963101e0d7
AC-3 decoder, soc revision 402, Jul 14 13:45:14 2007 UTC by jbr
jbr
parents:
5324
diff
changeset
|
74 static const uint8_t qntztab[16] = { 0, 5, 7, 3, 7, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 16 }; |
|
0d963101e0d7
AC-3 decoder, soc revision 402, Jul 14 13:45:14 2007 UTC by jbr
jbr
parents:
5324
diff
changeset
|
75 |
|
0d963101e0d7
AC-3 decoder, soc revision 402, Jul 14 13:45:14 2007 UTC by jbr
jbr
parents:
5324
diff
changeset
|
76 /* Adjustmens in dB gain */ |
|
0d963101e0d7
AC-3 decoder, soc revision 402, Jul 14 13:45:14 2007 UTC by jbr
jbr
parents:
5324
diff
changeset
|
77 #define LEVEL_MINUS_3DB 0.7071067811865476 |
|
0d963101e0d7
AC-3 decoder, soc revision 402, Jul 14 13:45:14 2007 UTC by jbr
jbr
parents:
5324
diff
changeset
|
78 #define LEVEL_MINUS_4POINT5DB 0.5946035575013605 |
|
0d963101e0d7
AC-3 decoder, soc revision 402, Jul 14 13:45:14 2007 UTC by jbr
jbr
parents:
5324
diff
changeset
|
79 #define LEVEL_MINUS_6DB 0.5000000000000000 |
|
0d963101e0d7
AC-3 decoder, soc revision 402, Jul 14 13:45:14 2007 UTC by jbr
jbr
parents:
5324
diff
changeset
|
80 #define LEVEL_PLUS_3DB 1.4142135623730951 |
|
0d963101e0d7
AC-3 decoder, soc revision 402, Jul 14 13:45:14 2007 UTC by jbr
jbr
parents:
5324
diff
changeset
|
81 #define LEVEL_PLUS_6DB 2.0000000000000000 |
|
0d963101e0d7
AC-3 decoder, soc revision 402, Jul 14 13:45:14 2007 UTC by jbr
jbr
parents:
5324
diff
changeset
|
82 #define LEVEL_ZERO 0.0000000000000000 |
|
0d963101e0d7
AC-3 decoder, soc revision 402, Jul 14 13:45:14 2007 UTC by jbr
jbr
parents:
5324
diff
changeset
|
83 |
|
0d963101e0d7
AC-3 decoder, soc revision 402, Jul 14 13:45:14 2007 UTC by jbr
jbr
parents:
5324
diff
changeset
|
84 static const float clevs[4] = { LEVEL_MINUS_3DB, LEVEL_MINUS_4POINT5DB, |
|
0d963101e0d7
AC-3 decoder, soc revision 402, Jul 14 13:45:14 2007 UTC by jbr
jbr
parents:
5324
diff
changeset
|
85 LEVEL_MINUS_6DB, LEVEL_MINUS_4POINT5DB }; |
|
0d963101e0d7
AC-3 decoder, soc revision 402, Jul 14 13:45:14 2007 UTC by jbr
jbr
parents:
5324
diff
changeset
|
86 |
|
0d963101e0d7
AC-3 decoder, soc revision 402, Jul 14 13:45:14 2007 UTC by jbr
jbr
parents:
5324
diff
changeset
|
87 static const float slevs[4] = { LEVEL_MINUS_3DB, LEVEL_MINUS_6DB, LEVEL_ZERO, LEVEL_MINUS_6DB }; |
|
0d963101e0d7
AC-3 decoder, soc revision 402, Jul 14 13:45:14 2007 UTC by jbr
jbr
parents:
5324
diff
changeset
|
88 |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
89 #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
|
90 |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
91 #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
|
92 #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
|
93 #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
|
94 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
95 /* Exponent strategies. */ |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
96 #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
|
97 #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
|
98 #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
|
99 #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
|
100 |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
101 /* 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
|
102 #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
|
103 #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
|
104 #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
|
105 #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
|
106 |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
107 /* 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
|
108 #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
|
109 #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
|
110 #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
|
111 #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
|
112 #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
|
113 |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
114 #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
|
115 #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
|
116 #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
|
117 #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
|
118 #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
|
119 #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
|
120 #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
|
121 #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
|
122 |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
123 /* Mersenne Twister */ |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
124 #define NMT 624 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
125 #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
|
126 #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
|
127 #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
|
128 #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
|
129 |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
130 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
131 typedef struct { |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
132 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
|
133 int mti; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
134 } dither_state; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
135 /* Mersenne Twister */ |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
136 |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
137 typedef struct { |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
138 uint16_t crc1; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
139 uint8_t fscod; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
140 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
141 uint8_t acmod; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
142 uint8_t cmixlev; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
143 uint8_t surmixlev; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
144 uint8_t dsurmod; |
|
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 uint8_t blksw; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
147 uint8_t dithflag; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
148 uint8_t cplinu; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
149 uint8_t chincpl; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
150 uint8_t phsflginu; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
151 uint8_t cplbegf; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
152 uint8_t cplendf; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
153 uint8_t cplcoe; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
154 uint32_t cplbndstrc; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
155 uint8_t rematstr; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
156 uint8_t rematflg; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
157 uint8_t cplexpstr; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
158 uint8_t lfeexpstr; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
159 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
|
160 uint8_t sdcycod; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
161 uint8_t fdcycod; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
162 uint8_t sgaincod; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
163 uint8_t dbpbcod; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
164 uint8_t floorcod; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
165 uint8_t csnroffst; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
166 uint8_t cplfsnroffst; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
167 uint8_t cplfgaincod; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
168 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
|
169 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
|
170 uint8_t lfefsnroffst; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
171 uint8_t lfefgaincod; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
172 uint8_t cplfleak; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
173 uint8_t cplsleak; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
174 uint8_t cpldeltbae; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
175 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
|
176 uint8_t cpldeltnseg; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
177 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
|
178 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
|
179 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
|
180 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
|
181 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
|
182 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
|
183 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
|
184 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
185 /* Derived Attributes. */ |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
186 int sampling_rate; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
187 int bit_rate; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
188 int frame_size; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
189 |
|
5321
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
190 int nfchans; //number of channels |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
191 int lfeon; //lfe channel in use |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
192 |
|
5321
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
193 float dynrng; //dynamic range gain |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
194 float dynrng2; //dynamic range gain for 1+1 mode |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
195 float chcoeffs[6]; //normalized channel coefficients |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
196 float cplco[5][18]; //coupling coordinates |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
197 int ncplbnd; //number of coupling bands |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
198 int ncplsubnd; //number of coupling sub bands |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
199 int cplstrtmant; //coupling start mantissa |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
200 int cplendmant; //coupling end mantissa |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
201 int endmant[5]; //channel end mantissas |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
202 |
|
5321
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
203 uint8_t dcplexps[256]; //decoded coupling exponents |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
204 uint8_t dexps[5][256]; //decoded fbw channel exponents |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
205 uint8_t dlfeexps[256]; //decoded lfe channel exponents |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
206 uint8_t cplbap[256]; //coupling bit allocation pointers |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
207 uint8_t bap[5][256]; //fbw channel bit allocation pointers |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
208 uint8_t lfebap[256]; //lfe channel bit allocation pointers |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
209 |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
210 int blkoutput; //output configuration for block |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
211 |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
212 DECLARE_ALIGNED_16(float, transform_coeffs[MAX_CHANNELS][BLOCK_SIZE]); //transform coefficients |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
213 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
214 /* For IMDCT. */ |
|
5321
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
215 MDCTContext imdct_512; //for 512 sample imdct transform |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
216 MDCTContext imdct_256; //for 256 sample imdct transform |
|
5317
6d81881f257f
AC-3 decoder, soc revision 57, Aug 19 12:44:38 2006 UTC by cloud9
jbr
parents:
5316
diff
changeset
|
217 DSPContext dsp; //for optimization |
|
5321
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
218 |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
219 DECLARE_ALIGNED_16(float, output[MAX_CHANNELS][BLOCK_SIZE]); //output after imdct transform and windowing |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
220 DECLARE_ALIGNED_16(float, delay[MAX_CHANNELS][BLOCK_SIZE]); //delay - added to the next block |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
221 DECLARE_ALIGNED_16(float, tmp_imdct[BLOCK_SIZE]); //temporary storage for imdct transform |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
222 DECLARE_ALIGNED_16(float, tmp_output[BLOCK_SIZE * 2]); //temporary storage for output before windowing |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
223 DECLARE_ALIGNED_16(float, window[BLOCK_SIZE]); //window coefficients |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
224 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
225 /* Miscellaneous. */ |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
226 GetBitContext gb; |
|
5321
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
227 dither_state dith_state; //for dither generation |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
228 } AC3DecodeContext; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
229 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
230 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
231 /* 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
|
232 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
|
233 { |
|
5321
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
234 static const uint32_t mag01[2] = { 0x00, MATRIX_A }; |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
235 uint32_t y; |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
236 int kk; |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
237 |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
238 if (seed == 0) |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
239 seed = 0x7ba05e; //default seed to my birthday! |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
240 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
241 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
|
242 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
|
243 state->mt[state->mti] = ((69069 * state->mt[state->mti - 1]) + 1); |
|
5321
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
244 |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
245 for (kk = 0; kk < NMT - MMT; kk++) { |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
246 y = (state->mt[kk] & UPPER_MASK) | (state->mt[kk + 1] & LOWER_MASK); |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
247 state->mt[kk] = state->mt[kk + MMT] ^ (y >> 1) ^ mag01[y & 0x01]; |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
248 } |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
249 for (;kk < NMT - 1; kk++) { |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
250 y = (state->mt[kk] & UPPER_MASK) | (state->mt[kk + 1] & LOWER_MASK); |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
251 state->mt[kk] = state->mt[kk + (MMT - NMT)] ^ (y >> 1) ^ mag01[y & 0x01]; |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
252 } |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
253 y = (state->mt[NMT - 1] & UPPER_MASK) | (state->mt[0] & LOWER_MASK); |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
254 state->mt[NMT - 1] = state->mt[MMT - 1] ^ (y >> 1) ^ mag01[y & 0x01]; |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
255 |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
256 state->mti = 0; |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
257 } |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
258 |
|
5321
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
259 static int16_t dither_int16(dither_state *state) |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
260 { |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
261 uint32_t y; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
262 |
|
5321
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
263 if (state->mti >= NMT) |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
264 state->mti = 0; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
265 |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
266 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
|
267 y ^= (y >> 11); |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
268 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
|
269 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
|
270 y ^= (y >> 18); |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
271 |
|
5321
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
272 return ((y << 16) >> 16); |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
273 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
274 /* END Mersenne Twister */ |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
275 |
|
5321
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
276 /*********** BEGIN INIT HELPER FUNCTIONS ***********/ |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
277 /** |
|
5319
40af705cef7e
AC-3 decoder, soc revision 69, Aug 31 07:12:56 2006 UTC by cloud9
jbr
parents:
5318
diff
changeset
|
278 * Generate a Kaiser-Bessel Derived Window. |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
279 */ |
|
5320
3348a76efb67
AC-3 decoder, soc revision 70, Aug 31 18:04:23 2006 UTC by banan
jbr
parents:
5319
diff
changeset
|
280 static void ac3_window_init(float *window) |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
281 { |
|
5319
40af705cef7e
AC-3 decoder, soc revision 69, Aug 31 07:12:56 2006 UTC by cloud9
jbr
parents:
5318
diff
changeset
|
282 int i, j; |
|
40af705cef7e
AC-3 decoder, soc revision 69, Aug 31 07:12:56 2006 UTC by cloud9
jbr
parents:
5318
diff
changeset
|
283 double sum = 0.0, bessel, tmp; |
|
40af705cef7e
AC-3 decoder, soc revision 69, Aug 31 07:12:56 2006 UTC by cloud9
jbr
parents:
5318
diff
changeset
|
284 double local_window[256]; |
|
40af705cef7e
AC-3 decoder, soc revision 69, Aug 31 07:12:56 2006 UTC by cloud9
jbr
parents:
5318
diff
changeset
|
285 double alpha2 = (5.0 * M_PI / 256.0) * (5.0 * M_PI / 256.0); |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
286 |
|
5319
40af705cef7e
AC-3 decoder, soc revision 69, Aug 31 07:12:56 2006 UTC by cloud9
jbr
parents:
5318
diff
changeset
|
287 for (i = 0; i < 256; i++) { |
|
40af705cef7e
AC-3 decoder, soc revision 69, Aug 31 07:12:56 2006 UTC by cloud9
jbr
parents:
5318
diff
changeset
|
288 tmp = i * (256 - i) * alpha2; |
|
40af705cef7e
AC-3 decoder, soc revision 69, Aug 31 07:12:56 2006 UTC by cloud9
jbr
parents:
5318
diff
changeset
|
289 bessel = 1.0; |
|
40af705cef7e
AC-3 decoder, soc revision 69, Aug 31 07:12:56 2006 UTC by cloud9
jbr
parents:
5318
diff
changeset
|
290 for (j = 100; j > 0; j--) /* defaul to 100 iterations */ |
|
40af705cef7e
AC-3 decoder, soc revision 69, Aug 31 07:12:56 2006 UTC by cloud9
jbr
parents:
5318
diff
changeset
|
291 bessel = bessel * tmp / (j * j) + 1; |
|
40af705cef7e
AC-3 decoder, soc revision 69, Aug 31 07:12:56 2006 UTC by cloud9
jbr
parents:
5318
diff
changeset
|
292 sum += bessel; |
|
40af705cef7e
AC-3 decoder, soc revision 69, Aug 31 07:12:56 2006 UTC by cloud9
jbr
parents:
5318
diff
changeset
|
293 local_window[i] = sum; |
|
40af705cef7e
AC-3 decoder, soc revision 69, Aug 31 07:12:56 2006 UTC by cloud9
jbr
parents:
5318
diff
changeset
|
294 } |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
295 |
|
5319
40af705cef7e
AC-3 decoder, soc revision 69, Aug 31 07:12:56 2006 UTC by cloud9
jbr
parents:
5318
diff
changeset
|
296 sum++; |
|
40af705cef7e
AC-3 decoder, soc revision 69, Aug 31 07:12:56 2006 UTC by cloud9
jbr
parents:
5318
diff
changeset
|
297 for (i = 0; i < 256; i++) |
|
40af705cef7e
AC-3 decoder, soc revision 69, Aug 31 07:12:56 2006 UTC by cloud9
jbr
parents:
5318
diff
changeset
|
298 window[i] = sqrt(local_window[i] / sum); |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
299 } |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
300 |
|
5321
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
301 /* |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
302 * Generate quantizer tables. |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
303 */ |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
304 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
|
305 { |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
306 int i; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
307 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
308 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
|
309 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
|
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 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
|
313 { |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
314 int i, j; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
315 int16_t v; |
|
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 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
|
318 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
|
319 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
|
320 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
|
321 } |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
322 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
323 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
|
324 quantizers[i] = 0; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
325 } |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
326 |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
327 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
|
328 { |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
329 int i, j; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
330 int16_t v; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
331 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
332 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
|
333 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
|
334 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
|
335 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
|
336 } |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
337 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
338 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
|
339 quantizers[i] = 0; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
340 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
341 } |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
342 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
343 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
|
344 { |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
345 int i, j; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
346 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
347 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
|
348 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
|
349 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
|
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 = 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
|
352 quantizers[i] = 0; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
353 } |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
354 |
|
5321
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
355 /* |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
356 * Initialize tables at runtime. |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
357 */ |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
358 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
|
359 { |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
360 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
|
361 /* 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
|
362 k = 0; |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
363 l = 0; |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
364 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
|
365 bndtab[i] = l; |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
366 v = bndsz[i]; |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
367 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
|
368 l += v; |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
369 } |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
370 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
|
371 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
|
372 |
|
5321
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
373 /* PSD Table For Mapping Exponents To PSD. */ |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
374 for (i = 0; i < 25; i++) |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
375 psdtab[i] = 3072 - (i << 7); |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
376 |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
377 /* Exponent Decoding Tables */ |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
378 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
|
379 v = i - 2; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
380 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
|
381 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
|
382 } |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
383 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
384 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
|
385 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
|
386 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
|
387 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
|
388 } |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
389 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
390 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
|
391 v = -2; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
392 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
|
393 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
|
394 } |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
395 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
396 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
|
397 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
|
398 /* 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
|
399 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
400 /* Quantizer ungrouping tables. */ |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
401 // 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
|
402 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
|
403 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
|
404 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
|
405 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
406 //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
|
407 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
|
408 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
|
409 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
|
410 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
411 //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
|
412 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
|
413 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
414 //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
|
415 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
|
416 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
|
417 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
418 //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
|
419 generate_quantizers_table(l15_quantizers, 15, 15); |
|
5321
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
420 /* End Quantizer ungrouping tables. */ |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
421 |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
422 //generate scale factors |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
423 for (i = 0; i < 25; i++) |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
424 scale_factors[i] = pow(2.0, -(i + 15)); |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
425 } |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
426 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
427 |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
428 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
|
429 { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
430 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
|
431 |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
432 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
|
433 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
|
434 ff_mdct_init(&ctx->imdct_512, 9, 1); |
|
5319
40af705cef7e
AC-3 decoder, soc revision 69, Aug 31 07:12:56 2006 UTC by cloud9
jbr
parents:
5318
diff
changeset
|
435 ac3_window_init(ctx->window); |
|
5317
6d81881f257f
AC-3 decoder, soc revision 57, Aug 19 12:44:38 2006 UTC by cloud9
jbr
parents:
5316
diff
changeset
|
436 dsputil_init(&ctx->dsp, avctx); |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
437 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
|
438 |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
439 return 0; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
440 } |
|
5321
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
441 /*********** END INIT FUNCTIONS ***********/ |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
442 |
|
5321
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
443 /* Synchronize to ac3 bitstream. |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
444 * This function searches for the syncword '0xb77'. |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
445 * |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
446 * @param buf Pointer to "probable" ac3 bitstream buffer |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
447 * @param buf_size Size of buffer |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
448 * @return Returns the position where syncword is found, -1 if no syncword is found |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
449 */ |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
450 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
|
451 { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
452 int i; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
453 |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
454 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
|
455 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
|
456 return i; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
457 |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
458 return -1; |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
459 } |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
460 |
|
5321
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
461 /* Parse the 'sync_info' from the ac3 bitstream. |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
462 * This function extracts the sync_info from ac3 bitstream. |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
463 * GetBitContext within AC3DecodeContext must point to |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
464 * start of the synchronized ac3 bitstream. |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
465 * |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
466 * @param ctx AC3DecodeContext |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
467 * @return Returns framesize, returns 0 if fscod, frmsizecod or bsid is not valid |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
468 */ |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
469 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
|
470 { |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
471 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
|
472 int frmsizecod, bsid; |
|
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 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
|
475 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
|
476 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
|
477 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
|
478 return 0; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
479 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
|
480 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
|
481 return 0; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
482 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
|
483 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
|
484 |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
485 /* 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
|
486 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
|
487 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
|
488 return 0; |
|
5309
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, 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
|
490 |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
491 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
|
492 case 0x00: |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
493 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
|
494 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
|
495 case 0x01: |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
496 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
|
497 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
|
498 case 0x02: |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
499 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
|
500 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
|
501 } |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
502 |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
503 /* never reached */ |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
504 return 0; |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
505 } |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
506 |
|
5321
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
507 /* Parse bsi from ac3 bitstream. |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
508 * This function extracts the bitstream information (bsi) from ac3 bitstream. |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
509 * |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
510 * @param ctx AC3DecodeContext after processed by ac3_parse_sync_info |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
511 */ |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
512 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
|
513 { |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
514 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
|
515 int i; |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
516 |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
517 ctx->cmixlev = 0; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
518 ctx->surmixlev = 0; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
519 ctx->dsurmod = 0; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
520 ctx->nfchans = 0; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
521 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
|
522 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
|
523 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
|
524 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
|
525 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
|
526 } |
|
5319
40af705cef7e
AC-3 decoder, soc revision 69, Aug 31 07:12:56 2006 UTC by cloud9
jbr
parents:
5318
diff
changeset
|
527 ctx->dynrng = 1.0; |
|
40af705cef7e
AC-3 decoder, soc revision 69, Aug 31 07:12:56 2006 UTC by cloud9
jbr
parents:
5318
diff
changeset
|
528 ctx->dynrng2 = 1.0; |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
529 |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
530 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
|
531 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
|
532 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
533 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
|
534 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
|
535 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
|
536 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
|
537 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
|
538 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
|
539 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
540 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
|
541 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
542 i = !(ctx->acmod); |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
543 do { |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
544 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
|
545 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
|
546 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
|
547 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
|
548 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
|
549 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
|
550 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
|
551 } while (i--); |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
552 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
553 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
|
554 |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
555 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
|
556 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
|
557 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
|
558 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
|
559 |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
560 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
|
561 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
|
562 do { |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
563 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
|
564 } while(i--); |
|
5304
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 } |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
567 |
|
5321
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
568 /* Decodes the grouped exponents. |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
569 * This function decodes the coded exponents according to exponent strategy |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
570 * and stores them in the decoded exponents buffer. |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
571 * |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
572 * @param gb GetBitContext which points to start of coded exponents |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
573 * @param expstr Exponent coding strategy |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
574 * @param ngrps Number of grouped exponetns |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
575 * @param absexp Absolute exponent |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
576 * @param dexps Decoded exponents are stored in dexps |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
577 * @return Returns 0 if exponents are decoded successfully, -1 if error occurs |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
578 */ |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
579 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
|
580 { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
581 int exps; |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
582 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
583 while (ngrps--) { |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
584 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
|
585 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
586 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
|
587 if (absexp > 24) { |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
588 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
|
589 return -ngrps; |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
590 } |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
591 switch (expstr) { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
592 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
|
593 *(dexps++) = absexp; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
594 *(dexps++) = absexp; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
595 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
|
596 *(dexps++) = absexp; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
597 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
|
598 *(dexps++) = absexp; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
599 } |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
600 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
601 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
|
602 if (absexp > 24) { |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
603 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
|
604 return -ngrps; |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
605 } |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
606 switch (expstr) { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
607 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
|
608 *(dexps++) = absexp; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
609 *(dexps++) = absexp; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
610 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
|
611 *(dexps++) = absexp; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
612 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
|
613 *(dexps++) = absexp; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
614 } |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
615 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
616 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
|
617 if (absexp > 24) { |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
618 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
|
619 return -ngrps; |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
620 } |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
621 switch (expstr) { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
622 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
|
623 *(dexps++) = absexp; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
624 *(dexps++) = absexp; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
625 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
|
626 *(dexps++) = absexp; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
627 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
|
628 *(dexps++) = absexp; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
629 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
630 } |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
631 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
632 return 0; |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
633 } |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
634 |
|
5321
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
635 /*********** HELPER FUNCTIONS FOR BIT ALLOCATION ***********/ |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
636 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
|
637 { |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
638 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
|
639 int address; |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
640 |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
641 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
|
642 |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
643 if (c >= 0) |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
644 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
|
645 else |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
646 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
|
647 } |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
648 |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
649 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
|
650 { |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
651 if (bin < 7) { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
652 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
|
653 a = 384; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
654 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
|
655 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
|
656 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
657 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
|
658 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
|
659 a = 320; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
660 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
|
661 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
|
662 } |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
663 else |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
664 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
|
665 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
666 return a; |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
667 } |
|
5321
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
668 /*********** END HELPER FUNCTIONS FOR BIT ALLOCATION ***********/ |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
669 |
|
5321
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
670 /* Performs bit allocation. |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
671 * This function performs bit allocation for the requested chanenl. |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
672 */ |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
673 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
|
674 { |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
675 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
|
676 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
|
677 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
|
678 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
|
679 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
|
680 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
|
681 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
|
682 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
|
683 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
684 /* initialization */ |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
685 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
|
686 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
|
687 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
|
688 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
|
689 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
|
690 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
691 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
|
692 start = ctx->cplstrtmant; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
693 end = ctx->cplendmant; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
694 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
|
695 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
|
696 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
|
697 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
|
698 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
|
699 bap = ctx->cplbap; |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
700 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
|
701 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
|
702 deltnseg = ctx->cpldeltnseg; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
703 deltoffst = ctx->cpldeltoffst; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
704 deltlen = ctx->cpldeltlen; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
705 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
|
706 } |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
707 } |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
708 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
|
709 start = 0; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
710 end = 7; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
711 lowcomp = 0; |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
712 fastleak = 0; |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
713 slowleak = 0; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
714 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
|
715 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
|
716 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
|
717 bap = ctx->lfebap; |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
718 } |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
719 else { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
720 start = 0; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
721 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
|
722 lowcomp = 0; |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
723 fastleak = 0; |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
724 slowleak = 0; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
725 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
|
726 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
|
727 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
|
728 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
|
729 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
|
730 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
|
731 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
|
732 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
|
733 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
|
734 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
|
735 } |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
736 } |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
737 |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
738 for (bin = start; bin < end; bin++) /* exponent mapping into psd */ |
|
5321
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
739 psd[bin] = psdtab[exps[bin]]; |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
740 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
741 /* psd integration */ |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
742 j = start; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
743 k = masktab[start]; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
744 do { |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
745 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
|
746 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
|
747 j++; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
748 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
|
749 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
|
750 j++; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
751 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
752 k++; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
753 } while (end > lastbin); |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
754 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
755 /* 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
|
756 bndstrt = masktab[start]; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
757 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
|
758 if (bndstrt == 0) { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
759 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
|
760 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
|
761 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
|
762 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
|
763 begin = 7; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
764 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
|
765 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
|
766 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
|
767 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
|
768 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
|
769 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
|
770 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
|
771 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
|
772 begin = bin + 1; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
773 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
774 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
775 } |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
776 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
|
777 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
|
778 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
|
779 fastleak -= fdecay; |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
780 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
|
781 slowleak -= sdecay; |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
782 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
|
783 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
|
784 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
785 begin = 22; |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
786 } |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
787 else { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
788 begin = bndstrt; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
789 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
790 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
|
791 fastleak -= fdecay; |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
792 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
|
793 slowleak -= sdecay; |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
794 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
|
795 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
|
796 } |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
797 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
798 /* 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
|
799 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
|
800 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
|
801 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
|
802 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
|
803 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
804 |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
805 /* 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
|
806 if (do_delta) { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
807 band = 0; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
808 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
|
809 band += deltoffst[seg]; |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
810 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
|
811 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
|
812 else |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
813 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
|
814 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
|
815 mask[band] += delta; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
816 band++; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
817 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
818 } |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
819 } |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
820 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
821 /*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
|
822 i = start; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
823 j = masktab[start]; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
824 do { |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
825 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
|
826 mask[j] -= snroffset; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
827 mask[j] -= floor; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
828 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
|
829 mask[j] = 0; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
830 mask[j] &= 0x1fe0; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
831 mask[j] += floor; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
832 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
|
833 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
|
834 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
|
835 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
|
836 i++; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
837 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
838 j++; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
839 } while (end > lastbin); |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
840 } |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
841 |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
842 /* 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
|
843 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
|
844 { |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
845 int i; |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
846 |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
847 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
|
848 (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
|
849 return 0; |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
850 |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
851 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
|
852 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
|
853 return 0; |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
854 |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
855 return 1; |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
856 } |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
857 |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
858 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
|
859 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
|
860 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
|
861 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
|
862 int l3ptr; |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
863 int l5ptr; |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
864 int l11ptr; |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
865 } mant_groups; |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
866 |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
867 #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
|
868 |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
869 /* 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
|
870 * 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
|
871 * 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
|
872 * 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
|
873 */ |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
874 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
|
875 { |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
876 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
|
877 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
|
878 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
|
879 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
|
880 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
|
881 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
882 cplbndstrc = ctx->cplbndstrc; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
883 start = ctx->cplstrtmant; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
884 bnd = 0; |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
885 |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
886 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
|
887 end = start + 12; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
888 while (cplbndstrc & 1) { |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
889 end += 12; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
890 cplbndstrc >>= 1; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
891 } |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
892 cplbndstrc >>= 1; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
893 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
|
894 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
|
895 bnd++; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
896 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
897 while (start < end) { |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
898 tbap = bap[start]; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
899 switch(tbap) { |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
900 case 0: |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
901 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
|
902 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
|
903 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
|
904 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
|
905 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
|
906 } else |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
907 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
|
908 } |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
909 start++; |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
910 continue; |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
911 case 1: |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
912 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
|
913 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
|
914 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
|
915 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
|
916 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
|
917 m->l3ptr = 0; |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
918 } |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
919 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
|
920 break; |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
921 |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
922 case 2: |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
923 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
|
924 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
|
925 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
|
926 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
|
927 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
|
928 m->l5ptr = 0; |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
929 } |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
930 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
|
931 break; |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
932 |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
933 case 3: |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
934 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
|
935 break; |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
936 |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
937 case 4: |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
938 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
|
939 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
|
940 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
|
941 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
|
942 m->l11ptr = 0; |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
943 } |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
944 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
|
945 break; |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
946 |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
947 case 5: |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
948 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
|
949 break; |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
950 |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
951 default: |
|
5311
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
952 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
|
953 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
|
954 } |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
955 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
|
956 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
|
957 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
|
958 start++; |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
959 } |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
960 } |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
961 |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
962 return 0; |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
963 } |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
964 |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
965 /* 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
|
966 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
|
967 { |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
968 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
|
969 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
|
970 uint8_t *exps; |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
971 uint8_t *bap; |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
972 float *coeffs; |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
973 float factors[25]; |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
974 |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
975 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
|
976 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
|
977 |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
978 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
|
979 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
|
980 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
|
981 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
|
982 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
|
983 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
|
984 } 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
|
985 dithflag = 0; |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
986 exps = ctx->dlfeexps; |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
987 bap = ctx->lfebap; |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
988 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
|
989 end = 7; |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
990 } |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
991 |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
992 |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
993 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
|
994 tbap = bap[i]; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
995 switch (tbap) { |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
996 case 0: |
|
5311
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
997 if (!dithflag) { |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
998 coeffs[i] = 0; |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
999 continue; |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1000 } |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1001 else { |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
1002 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
|
1003 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
|
1004 continue; |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1005 } |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
1006 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1007 case 1: |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1008 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
|
1009 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
|
1010 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
|
1011 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
|
1012 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
|
1013 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
|
1014 } |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1015 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
|
1016 continue; |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
1017 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1018 case 2: |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1019 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
|
1020 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
|
1021 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
|
1022 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
|
1023 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
|
1024 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
|
1025 } |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1026 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
|
1027 continue; |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
1028 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1029 case 3: |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
1030 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
|
1031 continue; |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
1032 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1033 case 4: |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1034 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
|
1035 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
|
1036 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
|
1037 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
|
1038 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
|
1039 } |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1040 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
|
1041 continue; |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
1042 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1043 case 5: |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
1044 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
|
1045 continue; |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
1046 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1047 default: |
|
5311
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1048 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
|
1049 continue; |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1050 } |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
1051 } |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
1052 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1053 return 0; |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
1054 } |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
1055 |
|
5321
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
1056 /* Get the transform coefficients. |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
1057 * This function extracts the tranform coefficients form the ac3 bitstream. |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
1058 * This function is called after bit allocation is performed. |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
1059 */ |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1060 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
|
1061 { |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1062 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
|
1063 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
|
1064 mant_groups m; |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1065 |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1066 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
|
1067 |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1068 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
|
1069 /* 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
|
1070 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
|
1071 return -1; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1072 /* 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
|
1073 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
|
1074 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
|
1075 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
|
1076 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
|
1077 return -1; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1078 } |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1079 got_cplchan = 1; |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1080 } |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1081 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
|
1082 } else |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1083 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
|
1084 do |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1085 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
|
1086 while(++end < 256); |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1087 } |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1088 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
|
1089 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
|
1090 return -1; |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1091 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
|
1092 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
|
1093 } |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
1094 } |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
1095 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1096 return 0; |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
1097 } |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
1098 |
|
5321
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
1099 /* Rematrixing routines. */ |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1100 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
|
1101 { |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1102 float tmp0, tmp1; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1103 |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1104 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
|
1105 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
|
1106 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
|
1107 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
|
1108 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
|
1109 start++; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1110 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1111 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1112 |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1113 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
|
1114 { |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
1115 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
|
1116 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
|
1117 |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
1118 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
|
1119 |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1120 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
|
1121 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
|
1122 |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1123 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
|
1124 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
|
1125 |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
1126 bndend = bnd4; |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
1127 if (bndend > end) { |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
1128 bndend = end; |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
1129 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
|
1130 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
|
1131 } else { |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
1132 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
|
1133 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
|
1134 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
|
1135 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
|
1136 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1137 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1138 |
|
5321
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
1139 /* This function sets the normalized channel coefficients. |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
1140 * Transform coefficients are multipllied by the channel |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
1141 * coefficients to get normalized transform coefficients. |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
1142 */ |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1143 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
|
1144 { |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1145 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
|
1146 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
|
1147 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
|
1148 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
|
1149 float nf = 1.0; //normalization factor for downmix coeffs |
|
5319
40af705cef7e
AC-3 decoder, soc revision 69, Aug 31 07:12:56 2006 UTC by cloud9
jbr
parents:
5318
diff
changeset
|
1150 int i; |
|
40af705cef7e
AC-3 decoder, soc revision 69, Aug 31 07:12:56 2006 UTC by cloud9
jbr
parents:
5318
diff
changeset
|
1151 |
|
40af705cef7e
AC-3 decoder, soc revision 69, Aug 31 07:12:56 2006 UTC by cloud9
jbr
parents:
5318
diff
changeset
|
1152 if (!ctx->acmod) { |
|
40af705cef7e
AC-3 decoder, soc revision 69, Aug 31 07:12:56 2006 UTC by cloud9
jbr
parents:
5318
diff
changeset
|
1153 ctx->chcoeffs[0] = 2 * ctx->dynrng; |
|
40af705cef7e
AC-3 decoder, soc revision 69, Aug 31 07:12:56 2006 UTC by cloud9
jbr
parents:
5318
diff
changeset
|
1154 ctx->chcoeffs[1] = 2 * ctx->dynrng2; |
|
40af705cef7e
AC-3 decoder, soc revision 69, Aug 31 07:12:56 2006 UTC by cloud9
jbr
parents:
5318
diff
changeset
|
1155 } else { |
|
40af705cef7e
AC-3 decoder, soc revision 69, Aug 31 07:12:56 2006 UTC by cloud9
jbr
parents:
5318
diff
changeset
|
1156 for (i = 0; i < ctx->nfchans; i++) |
|
40af705cef7e
AC-3 decoder, soc revision 69, Aug 31 07:12:56 2006 UTC by cloud9
jbr
parents:
5318
diff
changeset
|
1157 ctx->chcoeffs[i] = 2 * ctx->dynrng; |
|
40af705cef7e
AC-3 decoder, soc revision 69, Aug 31 07:12:56 2006 UTC by cloud9
jbr
parents:
5318
diff
changeset
|
1158 } |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1159 |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1160 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
|
1161 return; |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
1162 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1163 switch (from) { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1164 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
|
1165 switch (to) { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1166 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
|
1167 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
|
1168 nf = 0.5; |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1169 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
|
1170 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
|
1171 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1172 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1173 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1174 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
|
1175 switch (to) { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1176 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
|
1177 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
|
1178 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
|
1179 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1180 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1181 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1182 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
|
1183 switch (to) { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1184 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
|
1185 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
|
1186 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
|
1187 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
|
1188 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1189 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1190 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1191 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
|
1192 switch (to) { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1193 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
|
1194 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
|
1195 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
|
1196 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
|
1197 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
|
1198 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1199 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
|
1200 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
|
1201 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
|
1202 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
|
1203 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
|
1204 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1205 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1206 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1207 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
|
1208 switch (to) { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1209 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
|
1210 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
|
1211 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
|
1212 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
|
1213 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
|
1214 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1215 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
|
1216 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
|
1217 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
|
1218 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
|
1219 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
|
1220 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1221 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
|
1222 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
|
1223 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
|
1224 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
|
1225 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
|
1226 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1227 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1228 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1229 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
|
1230 switch (to) { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1231 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
|
1232 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
|
1233 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
|
1234 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
|
1235 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
|
1236 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
|
1237 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1238 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
|
1239 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
|
1240 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
|
1241 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
|
1242 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
|
1243 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
|
1244 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1245 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
|
1246 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
|
1247 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
|
1248 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
|
1249 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
|
1250 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
|
1251 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1252 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1253 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1254 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
|
1255 switch (to) { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1256 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
|
1257 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
|
1258 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
|
1259 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
|
1260 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
|
1261 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
|
1262 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1263 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
|
1264 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
|
1265 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
|
1266 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
|
1267 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
|
1268 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
|
1269 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1270 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
|
1271 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
|
1272 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
|
1273 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
|
1274 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
|
1275 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
|
1276 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1277 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1278 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1279 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
|
1280 switch (to) { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1281 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
|
1282 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
|
1283 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
|
1284 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
|
1285 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
|
1286 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
|
1287 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
|
1288 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1289 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
|
1290 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
|
1291 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
|
1292 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
|
1293 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
|
1294 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
|
1295 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
|
1296 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1297 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
|
1298 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
|
1299 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
|
1300 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
|
1301 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
|
1302 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
|
1303 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
|
1304 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1305 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1306 break; |
|
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 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1309 |
|
5321
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
1310 /*********** BEGIN DOWNMIX FUNCTIONS ***********/ |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1311 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
|
1312 { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1313 int i; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1314 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
|
1315 |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1316 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
|
1317 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
|
1318 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
|
1319 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1320 |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1321 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
|
1322 { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1323 int i; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1324 float tmp; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1325 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
|
1326 |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1327 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
|
1328 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
|
1329 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
|
1330 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1331 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1332 |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1333 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
|
1334 { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1335 int i; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1336 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
|
1337 |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1338 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
|
1339 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
|
1340 } |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1341 |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1342 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
|
1343 { |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1344 int i; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1345 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
|
1346 |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1347 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
|
1348 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
|
1349 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
|
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_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
|
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; |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1356 |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1357 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
|
1358 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
|
1359 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
|
1360 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
|
1361 } |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1362 |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1363 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
|
1364 { |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1365 int i; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1366 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
|
1367 |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1368 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
|
1369 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
|
1370 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
|
1371 } |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1372 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
|
1373 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1374 |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1375 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
|
1376 { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1377 int i; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1378 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
|
1379 |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1380 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
|
1381 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
|
1382 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
|
1383 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
|
1384 |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1385 } |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1386 |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1387 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
|
1388 { |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1389 int i; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1390 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
|
1391 |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1392 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
|
1393 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
|
1394 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
|
1395 } |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1396 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
|
1397 } |
|
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 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
|
1400 { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1401 int i; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1402 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
|
1403 |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1404 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
|
1405 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
|
1406 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
|
1407 } |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1408 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
|
1409 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1410 |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1411 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
|
1412 { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1413 int i; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1414 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
|
1415 |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1416 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
|
1417 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
|
1418 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
|
1419 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
|
1420 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
|
1421 } |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1422 |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1423 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
|
1424 { |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1425 int i; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1426 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
|
1427 |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1428 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
|
1429 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
|
1430 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
|
1431 } |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1432 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
|
1433 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
|
1434 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1435 |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1436 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
|
1437 { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1438 int i; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1439 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
|
1440 |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1441 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
|
1442 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
|
1443 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
|
1444 } |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1445 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
|
1446 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
|
1447 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1448 |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1449 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
|
1450 { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1451 int i; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1452 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
|
1453 |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1454 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
|
1455 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
|
1456 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
|
1457 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
|
1458 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
|
1459 } |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1460 |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1461 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
|
1462 { |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1463 int i; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1464 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
|
1465 |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1466 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
|
1467 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
|
1468 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
|
1469 } |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1470 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
|
1471 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
|
1472 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1473 |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1474 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
|
1475 { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1476 int i; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1477 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
|
1478 |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1479 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
|
1480 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
|
1481 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
|
1482 } |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1483 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
|
1484 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
|
1485 } |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1486 |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1487 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
|
1488 { |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1489 int i; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1490 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
|
1491 |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1492 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
|
1493 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
|
1494 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
|
1495 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
|
1496 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
|
1497 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
|
1498 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1499 |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1500 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
|
1501 { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1502 int i; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1503 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
|
1504 |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1505 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
|
1506 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
|
1507 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
|
1508 } |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1509 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
|
1510 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
|
1511 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
|
1512 } |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1513 |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1514 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
|
1515 { |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1516 int i; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1517 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
|
1518 |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1519 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
|
1520 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
|
1521 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
|
1522 } |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1523 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
|
1524 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
|
1525 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
|
1526 } |
|
5321
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
1527 /*********** END DOWNMIX FUNCTIONS ***********/ |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
1528 |
|
5321
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
1529 /* Downmix the output. |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
1530 * This function downmixes the output when the number of input |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
1531 * channels is not equal to the number of output channels requested. |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
1532 */ |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1533 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
|
1534 { |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1535 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
|
1536 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
|
1537 |
|
5321
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
1538 if (to == AC3_OUTPUT_UNMODIFIED) |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
1539 return; |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
1540 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1541 switch (from) { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1542 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
|
1543 switch (to) { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1544 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
|
1545 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
|
1546 break; |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1547 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
|
1548 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
|
1549 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1550 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1551 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1552 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
|
1553 switch (to) { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1554 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
|
1555 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
|
1556 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1557 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1558 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1559 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
|
1560 switch (to) { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1561 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
|
1562 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
|
1563 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1564 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1565 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1566 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
|
1567 switch (to) { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1568 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
|
1569 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
|
1570 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1571 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
|
1572 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
|
1573 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1574 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1575 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1576 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
|
1577 switch (to) { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1578 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
|
1579 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
|
1580 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1581 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
|
1582 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
|
1583 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1584 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
|
1585 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
|
1586 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1587 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1588 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1589 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
|
1590 switch (to) { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1591 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
|
1592 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
|
1593 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1594 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
|
1595 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
|
1596 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1597 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
|
1598 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
|
1599 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1600 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1601 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1602 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
|
1603 switch (to) { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1604 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
|
1605 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
|
1606 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1607 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
|
1608 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
|
1609 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1610 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
|
1611 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
|
1612 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1613 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1614 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1615 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
|
1616 switch (to) { |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1617 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
|
1618 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
|
1619 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1620 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
|
1621 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
|
1622 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1623 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
|
1624 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
|
1625 break; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1626 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1627 break; |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
1628 } |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1629 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1630 |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1631 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
|
1632 { |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1633 int i; |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1634 |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1635 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
|
1636 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
|
1637 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
|
1638 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
|
1639 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
|
1640 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
|
1641 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
|
1642 } |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1643 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
|
1644 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
|
1645 } |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1646 |
|
5321
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
1647 /* This function performs the imdct on 256 sample transform |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
1648 * coefficients. |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
1649 */ |
|
5311
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1650 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
|
1651 { |
|
5311
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1652 int k; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1653 float x1[128], x2[128]; |
|
5322
b55b8c792066
AC-3 decoder, soc revision 72, Sep 7 04:20:00 2006 UTC by cloud9
jbr
parents:
5321
diff
changeset
|
1654 float *o_ptr, *d_ptr, *w; |
|
b55b8c792066
AC-3 decoder, soc revision 72, Sep 7 04:20:00 2006 UTC by cloud9
jbr
parents:
5321
diff
changeset
|
1655 FFTComplex *ptr1, *ptr2; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1656 |
|
5311
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1657 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
|
1658 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
|
1659 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
|
1660 } |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1661 |
|
5324
33e13333dc4d
AC-3 decoder, soc revision 148, Sep 28 18:38:27 2006 UTC by banan
jbr
parents:
5323
diff
changeset
|
1662 ctx->imdct_256.fft.imdct_calc(&ctx->imdct_256, ctx->tmp_output, x1, ctx->tmp_imdct); |
|
33e13333dc4d
AC-3 decoder, soc revision 148, Sep 28 18:38:27 2006 UTC by banan
jbr
parents:
5323
diff
changeset
|
1663 ctx->imdct_256.fft.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
|
1664 |
|
5322
b55b8c792066
AC-3 decoder, soc revision 72, Sep 7 04:20:00 2006 UTC by cloud9
jbr
parents:
5321
diff
changeset
|
1665 o_ptr = ctx->output[chindex]; |
|
b55b8c792066
AC-3 decoder, soc revision 72, Sep 7 04:20:00 2006 UTC by cloud9
jbr
parents:
5321
diff
changeset
|
1666 d_ptr = ctx->delay[chindex]; |
|
b55b8c792066
AC-3 decoder, soc revision 72, Sep 7 04:20:00 2006 UTC by cloud9
jbr
parents:
5321
diff
changeset
|
1667 ptr1 = (FFTComplex *)ctx->tmp_output; |
|
b55b8c792066
AC-3 decoder, soc revision 72, Sep 7 04:20:00 2006 UTC by cloud9
jbr
parents:
5321
diff
changeset
|
1668 ptr2 = (FFTComplex *)ctx->tmp_output + 256; |
|
b55b8c792066
AC-3 decoder, soc revision 72, Sep 7 04:20:00 2006 UTC by cloud9
jbr
parents:
5321
diff
changeset
|
1669 w = ctx->window; |
|
b55b8c792066
AC-3 decoder, soc revision 72, Sep 7 04:20:00 2006 UTC by cloud9
jbr
parents:
5321
diff
changeset
|
1670 |
|
b55b8c792066
AC-3 decoder, soc revision 72, Sep 7 04:20:00 2006 UTC by cloud9
jbr
parents:
5321
diff
changeset
|
1671 for (k = 0; k < N / 8; k++) |
|
b55b8c792066
AC-3 decoder, soc revision 72, Sep 7 04:20:00 2006 UTC by cloud9
jbr
parents:
5321
diff
changeset
|
1672 { |
|
b55b8c792066
AC-3 decoder, soc revision 72, Sep 7 04:20:00 2006 UTC by cloud9
jbr
parents:
5321
diff
changeset
|
1673 o_ptr[2 * k] = -ptr1[k].im * w[2 * k] + d_ptr[2 * k] + 384.0; |
|
b55b8c792066
AC-3 decoder, soc revision 72, Sep 7 04:20:00 2006 UTC by cloud9
jbr
parents:
5321
diff
changeset
|
1674 o_ptr[2 * k + 1] = ptr1[N / 8 - k - 1].re * w[2 * k + 1] + 384.0; |
|
b55b8c792066
AC-3 decoder, soc revision 72, Sep 7 04:20:00 2006 UTC by cloud9
jbr
parents:
5321
diff
changeset
|
1675 o_ptr[N / 4 + 2 * k] = -ptr1[k].re * w[N / 4 + 2 * k] + d_ptr[N / 4 + 2 * k] + 384.0; |
|
b55b8c792066
AC-3 decoder, soc revision 72, Sep 7 04:20:00 2006 UTC by cloud9
jbr
parents:
5321
diff
changeset
|
1676 o_ptr[N / 4 + 2 * k + 1] = ptr1[N / 8 - k - 1].im * w[N / 4 + 2 * k + 1] + d_ptr[N / 4 + 2 * k + 1] + 384.0; |
|
b55b8c792066
AC-3 decoder, soc revision 72, Sep 7 04:20:00 2006 UTC by cloud9
jbr
parents:
5321
diff
changeset
|
1677 d_ptr[2 * k] = ptr2[k].re * w[k / 2 - 2 * k - 1]; |
|
b55b8c792066
AC-3 decoder, soc revision 72, Sep 7 04:20:00 2006 UTC by cloud9
jbr
parents:
5321
diff
changeset
|
1678 d_ptr[2 * k + 1] = -ptr2[N / 8 - k - 1].im * w[N / 2 - 2 * k - 2]; |
|
b55b8c792066
AC-3 decoder, soc revision 72, Sep 7 04:20:00 2006 UTC by cloud9
jbr
parents:
5321
diff
changeset
|
1679 d_ptr[N / 4 + 2 * k] = ptr2[k].im * w[N / 4 - 2 * k - 1]; |
|
b55b8c792066
AC-3 decoder, soc revision 72, Sep 7 04:20:00 2006 UTC by cloud9
jbr
parents:
5321
diff
changeset
|
1680 d_ptr[N / 4 + 2 * k + 1] = -ptr2[N / 8 - k - 1].re * w[N / 4 - 2 * k - 2]; |
|
b55b8c792066
AC-3 decoder, soc revision 72, Sep 7 04:20:00 2006 UTC by cloud9
jbr
parents:
5321
diff
changeset
|
1681 } |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1682 } |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1683 |
|
5321
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
1684 /* This function performs the imdct on 512 sample transform |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
1685 * coefficients. |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
1686 */ |
|
5311
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1687 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
|
1688 { |
|
5317
6d81881f257f
AC-3 decoder, soc revision 57, Aug 19 12:44:38 2006 UTC by cloud9
jbr
parents:
5316
diff
changeset
|
1689 float *ptr; |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1690 |
|
5324
33e13333dc4d
AC-3 decoder, soc revision 148, Sep 28 18:38:27 2006 UTC by banan
jbr
parents:
5323
diff
changeset
|
1691 ctx->imdct_512.fft.imdct_calc(&ctx->imdct_512, ctx->tmp_output, |
|
33e13333dc4d
AC-3 decoder, soc revision 148, Sep 28 18:38:27 2006 UTC by banan
jbr
parents:
5323
diff
changeset
|
1692 ctx->transform_coeffs[chindex], ctx->tmp_imdct); |
|
5317
6d81881f257f
AC-3 decoder, soc revision 57, Aug 19 12:44:38 2006 UTC by cloud9
jbr
parents:
5316
diff
changeset
|
1693 ptr = ctx->output[chindex]; |
|
5319
40af705cef7e
AC-3 decoder, soc revision 69, Aug 31 07:12:56 2006 UTC by cloud9
jbr
parents:
5318
diff
changeset
|
1694 ctx->dsp.vector_fmul_add_add(ptr, ctx->tmp_output, ctx->window, ctx->delay[chindex], 384, BLOCK_SIZE, 1); |
|
5317
6d81881f257f
AC-3 decoder, soc revision 57, Aug 19 12:44:38 2006 UTC by cloud9
jbr
parents:
5316
diff
changeset
|
1695 ptr = ctx->delay[chindex]; |
|
5319
40af705cef7e
AC-3 decoder, soc revision 69, Aug 31 07:12:56 2006 UTC by cloud9
jbr
parents:
5318
diff
changeset
|
1696 ctx->dsp.vector_fmul_reverse(ptr, ctx->tmp_output + 256, ctx->window, BLOCK_SIZE); |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1697 } |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1698 |
|
5321
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
1699 /* IMDCT Transform. */ |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1700 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
|
1701 { |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1702 int i; |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1703 |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1704 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
|
1705 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
|
1706 } |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
1707 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
|
1708 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
|
1709 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
|
1710 else |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
1711 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
|
1712 } |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1713 } |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1714 |
|
5321
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
1715 /* Parse the audio block from ac3 bitstream. |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
1716 * This function extract the audio block from the ac3 bitstream |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
1717 * and produces the output for the block. This function must |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
1718 * be called for each of the six audio block in the ac3 bitstream. |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
1719 */ |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1720 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
|
1721 { |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1722 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
|
1723 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
|
1724 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
|
1725 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
|
1726 int bit_alloc_flags = 0; |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1727 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
|
1728 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
|
1729 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
|
1730 |
|
5312
2c875e6274d5
AC-3 decoder, soc revision 52, Aug 16 22:45:07 2006 UTC by cloud9
jbr
parents:
5311
diff
changeset
|
1731 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
|
1732 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
|
1733 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
|
1734 |
|
5312
2c875e6274d5
AC-3 decoder, soc revision 52, Aug 16 22:45:07 2006 UTC by cloud9
jbr
parents:
5311
diff
changeset
|
1735 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
|
1736 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
|
1737 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
|
1738 |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1739 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
|
1740 dynrng = get_sbits(gb, 8); |
|
5319
40af705cef7e
AC-3 decoder, soc revision 69, Aug 31 07:12:56 2006 UTC by cloud9
jbr
parents:
5318
diff
changeset
|
1741 ctx->dynrng = ((((dynrng & 0x1f) | 0x20) << 13) * scale_factors[3 - (dynrng >> 5)]); |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1742 } |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1743 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1744 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
|
1745 dynrng = get_sbits(gb, 8); |
|
5319
40af705cef7e
AC-3 decoder, soc revision 69, Aug 31 07:12:56 2006 UTC by cloud9
jbr
parents:
5318
diff
changeset
|
1746 ctx->dynrng2 = ((((dynrng & 0x1f) | 0x20) << 13) * scale_factors[3 - (dynrng >> 5)]); |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
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 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1749 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
|
1750 |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1751 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
|
1752 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
|
1753 ctx->cplbndstrc = 0; |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
1754 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
|
1755 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
|
1756 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
|
1757 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
|
1758 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1759 if (acmod == 0x02) |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1760 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
|
1761 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1762 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
|
1763 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
|
1764 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1765 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
|
1766 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
|
1767 return -1; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1768 } |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1769 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1770 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
|
1771 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
|
1772 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
|
1773 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
|
1774 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
|
1775 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
|
1776 ctx->ncplbnd--; |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1777 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1778 } |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
1779 } |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1780 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1781 if (ctx->cplinu) { |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1782 ctx->cplcoe = 0; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1783 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1784 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
|
1785 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
|
1786 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
|
1787 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
|
1788 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
|
1789 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
|
1790 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
|
1791 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
|
1792 if (cplcoexp == 15) |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1793 cplcomant <<= 14; |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1794 else |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1795 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
|
1796 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
|
1797 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1798 } |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1799 |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
1800 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
|
1801 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
|
1802 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
|
1803 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
|
1804 } |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1805 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1806 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
|
1807 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
|
1808 if (ctx->rematstr) { |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1809 ctx->rematflg = 0; |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1810 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1811 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
|
1812 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
|
1813 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
|
1814 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
|
1815 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
|
1816 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
|
1817 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
|
1818 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
|
1819 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
|
1820 } |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
1821 } |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1822 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1823 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
|
1824 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
|
1825 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
|
1826 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
|
1827 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
|
1828 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
|
1829 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
|
1830 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
|
1831 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1832 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
|
1833 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
|
1834 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
|
1835 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
|
1836 else { |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1837 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
|
1838 if (chbwcod > 60) { |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1839 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
|
1840 return -1; |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
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 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
|
1843 } |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1844 } |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1845 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1846 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
|
1847 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
|
1848 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
|
1849 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
|
1850 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
|
1851 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
|
1852 return -1; |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1853 } |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1854 } |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1855 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1856 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
|
1857 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
|
1858 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
|
1859 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
|
1860 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
|
1861 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
|
1862 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
|
1863 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
|
1864 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
|
1865 return -1; |
|
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1866 } |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1867 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
|
1868 } |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1869 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1870 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
|
1871 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
|
1872 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
|
1873 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
|
1874 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
|
1875 return -1; |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1876 } |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1877 } |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1878 |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1879 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
|
1880 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
|
1881 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
|
1882 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
|
1883 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
|
1884 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
|
1885 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
|
1886 } |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1887 |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1888 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
|
1889 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
|
1890 ctx->csnroffst = get_bits(gb, 6); |
|
5323
4ba6d8132f36
AC-3 decoder, soc revision 109, Sep 22 22:42:54 2006 UTC by banan
jbr
parents:
5322
diff
changeset
|
1891 if (ctx->cplinu) { /* coupling 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
|
1892 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
|
1893 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
|
1894 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1895 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
|
1896 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
|
1897 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
|
1898 } |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1899 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
|
1900 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
|
1901 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
|
1902 } |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
1903 } |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1904 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1905 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
|
1906 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
|
1907 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
|
1908 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
|
1909 } |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
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 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
|
1912 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
|
1913 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1914 if (ctx->cplinu) { |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1915 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
|
1916 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
|
1917 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
|
1918 return -1; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1919 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1920 } |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1921 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1922 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
|
1923 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
|
1924 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
|
1925 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
|
1926 return -1; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1927 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1928 } |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1929 |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1930 if (ctx->cplinu) |
|
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1931 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
|
1932 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
|
1933 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
|
1934 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
|
1935 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
|
1936 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
|
1937 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1938 } |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1939 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1940 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
|
1941 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
|
1942 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
|
1943 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
|
1944 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
|
1945 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
|
1946 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
|
1947 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1948 } |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
1949 } |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1950 |
|
5310
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
1951 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
|
1952 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
|
1953 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
|
1954 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
|
1955 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
|
1956 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
|
1957 } else { |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
1958 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
|
1959 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
|
1960 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
|
1961 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
|
1962 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
|
1963 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
|
1964 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
|
1965 } |
|
9aa9197034d7
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents:
5309
diff
changeset
|
1966 } |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
1967 |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1968 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
|
1969 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
|
1970 while(skipl--) |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
1971 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
|
1972 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1973 /* 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
|
1974 * * 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
|
1975 */ |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1976 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
|
1977 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
|
1978 return -1; |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
1979 } |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1980 /*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
|
1981 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
|
1982 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1983 /* 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
|
1984 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
|
1985 do_rematrixing(ctx); |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1986 |
|
5318
ef4ef249ca72
AC-3 decoder, soc revision 58, Aug 19 14:20:45 2006 UTC by cloud9
jbr
parents:
5317
diff
changeset
|
1987 do_downmix(ctx); |
|
ef4ef249ca72
AC-3 decoder, soc revision 58, Aug 19 14:20:45 2006 UTC by cloud9
jbr
parents:
5317
diff
changeset
|
1988 |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
1989 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
|
1990 /*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
|
1991 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
|
1992 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1993 return 0; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
1994 } |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
1995 |
|
5318
ef4ef249ca72
AC-3 decoder, soc revision 58, Aug 19 14:20:45 2006 UTC by cloud9
jbr
parents:
5317
diff
changeset
|
1996 static inline int16_t convert(int32_t i) |
|
ef4ef249ca72
AC-3 decoder, soc revision 58, Aug 19 14:20:45 2006 UTC by cloud9
jbr
parents:
5317
diff
changeset
|
1997 { |
|
ef4ef249ca72
AC-3 decoder, soc revision 58, Aug 19 14:20:45 2006 UTC by cloud9
jbr
parents:
5317
diff
changeset
|
1998 if (i > 0x43c07fff) |
|
ef4ef249ca72
AC-3 decoder, soc revision 58, Aug 19 14:20:45 2006 UTC by cloud9
jbr
parents:
5317
diff
changeset
|
1999 return 32767; |
|
ef4ef249ca72
AC-3 decoder, soc revision 58, Aug 19 14:20:45 2006 UTC by cloud9
jbr
parents:
5317
diff
changeset
|
2000 else if (i <= 0x43bf8000) |
|
ef4ef249ca72
AC-3 decoder, soc revision 58, Aug 19 14:20:45 2006 UTC by cloud9
jbr
parents:
5317
diff
changeset
|
2001 return -32768; |
|
ef4ef249ca72
AC-3 decoder, soc revision 58, Aug 19 14:20:45 2006 UTC by cloud9
jbr
parents:
5317
diff
changeset
|
2002 else |
|
ef4ef249ca72
AC-3 decoder, soc revision 58, Aug 19 14:20:45 2006 UTC by cloud9
jbr
parents:
5317
diff
changeset
|
2003 return (i - 0x43c00000); |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
2004 } |
|
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
2005 |
|
5308
82b41f5a86ef
AC-3 decoder, soc revision 34, Jul 18 14:27:54 2006 UTC by cloud9
jbr
parents:
5307
diff
changeset
|
2006 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
|
2007 |
|
5321
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
2008 /* Decode ac3 frame. |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
2009 * |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
2010 * @param avctx Pointer to AVCodecContext |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
2011 * @param data Pointer to pcm smaples |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
2012 * @param data_size Set to number of pcm samples produced by decoding |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
2013 * @param buf Data to be decoded |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
2014 * @param buf_size Size of the buffer |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
2015 */ |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
2016 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
|
2017 { |
|
5305
5892b4a6380b
AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents:
5304
diff
changeset
|
2018 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
|
2019 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
|
2020 int16_t *out_samples = (int16_t *)data; |
|
5318
ef4ef249ca72
AC-3 decoder, soc revision 58, Aug 19 14:20:45 2006 UTC by cloud9
jbr
parents:
5317
diff
changeset
|
2021 int i, j, k, start; |
|
ef4ef249ca72
AC-3 decoder, soc revision 58, Aug 19 14:20:45 2006 UTC by cloud9
jbr
parents:
5317
diff
changeset
|
2022 int32_t *int_ptr[6]; |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
2023 |
|
5318
ef4ef249ca72
AC-3 decoder, soc revision 58, Aug 19 14:20:45 2006 UTC by cloud9
jbr
parents:
5317
diff
changeset
|
2024 for (i = 0; i < 6; i++) |
|
ef4ef249ca72
AC-3 decoder, soc revision 58, Aug 19 14:20:45 2006 UTC by cloud9
jbr
parents:
5317
diff
changeset
|
2025 int_ptr[i] = (int32_t *)(&ctx->output[i]); |
|
ef4ef249ca72
AC-3 decoder, soc revision 58, Aug 19 14:20:45 2006 UTC by cloud9
jbr
parents:
5317
diff
changeset
|
2026 |
|
ef4ef249ca72
AC-3 decoder, soc revision 58, Aug 19 14:20:45 2006 UTC by cloud9
jbr
parents:
5317
diff
changeset
|
2027 //av_log(NULL, AV_LOG_INFO, "decoding frame %d buf_size = %d\n", frame_count++, buf_size); |
|
5308
82b41f5a86ef
AC-3 decoder, soc revision 34, Jul 18 14:27:54 2006 UTC by cloud9
jbr
parents:
5307
diff
changeset
|
2028 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
2029 //Synchronize the frame. |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
2030 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
|
2031 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
|
2032 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
|
2033 *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
|
2034 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
|
2035 } |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
2036 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
2037 //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
|
2038 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
|
2039 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
2040 //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
|
2041 //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
|
2042 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
|
2043 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
|
2044 *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
|
2045 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
|
2046 } |
|
5303
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
2047 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
2048 //Parse the BSI. |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
2049 //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
|
2050 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
|
2051 |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
2052 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
|
2053 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
|
2054 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
2055 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
|
2056 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
|
2057 if (ctx->lfeon) |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
2058 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
|
2059 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
|
2060 } |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
2061 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
|
2062 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
|
2063 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
|
2064 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
|
2065 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
|
2066 else |
|
5309
0662a270aab7
AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents:
5308
diff
changeset
|
2067 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
|
2068 } |
|
5311
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
2069 else { |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
2070 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
|
2071 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
|
2072 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
|
2073 if (ctx->lfeon) |
|
7742d5411c9d
AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9
jbr
parents:
5310
diff
changeset
|
2074 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
|
2075 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
|
2076 } |
|
b8821ff5c30d
AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff
changeset
|
2077 |
|
5318
ef4ef249ca72
AC-3 decoder, soc revision 58, Aug 19 14:20:45 2006 UTC by cloud9
jbr
parents:
5317
diff
changeset
|
2078 //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
|
2079 |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
2080 //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
|
2081 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
|
2082 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
|
2083 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
|
2084 *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
|
2085 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
|
2086 } |
|
5318
ef4ef249ca72
AC-3 decoder, soc revision 58, Aug 19 14:20:45 2006 UTC by cloud9
jbr
parents:
5317
diff
changeset
|
2087 start = (ctx->blkoutput & AC3_OUTPUT_LFEON) ? 0 : 1; |
|
ef4ef249ca72
AC-3 decoder, soc revision 58, Aug 19 14:20:45 2006 UTC by cloud9
jbr
parents:
5317
diff
changeset
|
2088 for (k = 0; k < BLOCK_SIZE; k++) |
|
ef4ef249ca72
AC-3 decoder, soc revision 58, Aug 19 14:20:45 2006 UTC by cloud9
jbr
parents:
5317
diff
changeset
|
2089 for (j = start; j <= avctx->channels; j++) |
|
ef4ef249ca72
AC-3 decoder, soc revision 58, Aug 19 14:20:45 2006 UTC by cloud9
jbr
parents:
5317
diff
changeset
|
2090 *(out_samples++) = convert(int_ptr[j][k]); |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
2091 } |
|
5306
abc5c130b448
AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents:
5305
diff
changeset
|
2092 *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
|
2093 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
|
2094 } |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
2095 |
|
5321
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
2096 /* Uninitialize ac3 decoder. |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
2097 */ |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
2098 static int ac3_decode_end(AVCodecContext *avctx) |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
2099 { |
|
5321
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
2100 AC3DecodeContext *ctx = (AC3DecodeContext *)avctx->priv_data; |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
2101 ff_mdct_end(&ctx->imdct_512); |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
2102 ff_mdct_end(&ctx->imdct_256); |
|
fcb2a52c88fe
AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents:
5320
diff
changeset
|
2103 |
|
5304
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
2104 return 0; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
2105 } |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
2106 |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
2107 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
|
2108 .name = "ac3", |
|
31033309ebc9
AC-3 decoder, soc revision 55, Aug 17 12:25:24 2006 UTC by cloud9
jbr
parents:
5314
diff
changeset
|
2109 .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
|
2110 .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
|
2111 .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
|
2112 .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
|
2113 .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
|
2114 .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
|
2115 }; |
|
eff51058fe13
AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents:
5303
diff
changeset
|
2116 |
