annotate ac3dec.c @ 8520:a0164882aa38 libavcodec

Generic metadata API. avi is updated as example. No version bump, the API still might change slightly ... No update to ffmpeg.c as requested by aurel.
author michael
date Sun, 04 Jan 2009 18:48:37 +0000
parents f93efc084e41
children a5402e89a80c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5328
5f83f09bd748 revise license header for simplicity and consistency
jbr
parents: 5326
diff changeset
1 /*
5f83f09bd748 revise license header for simplicity and consistency
jbr
parents: 5326
diff changeset
2 * AC-3 Audio Decoder
7626
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
3 * This code was developed as part of Google Summer of Code 2006.
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
4 * E-AC-3 support was added as part of Google Summer of Code 2007.
5316
a09b700fcfca AC-3 decoder, soc revision 56, Aug 17 14:21:58 2006 UTC by cloud9
jbr
parents: 5315
diff changeset
5 *
5328
5f83f09bd748 revise license header for simplicity and consistency
jbr
parents: 5326
diff changeset
6 * Copyright (c) 2006 Kartikey Mahendra BHATT (bhattkm at gmail dot com).
7626
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
7 * Copyright (c) 2007-2008 Bartlomiej Wolowiec <bartek.wolowiec@gmail.com>
7594
cd6217c9ce92 update my email address to one which does not depend on my service provider
jbr
parents: 7564
diff changeset
8 * Copyright (c) 2007 Justin Ruggles <justin.ruggles@gmail.com>
5316
a09b700fcfca AC-3 decoder, soc revision 56, Aug 17 14:21:58 2006 UTC by cloud9
jbr
parents: 5315
diff changeset
9 *
5377
2020fab0e37a update license header. add copyright for myself. correct and complete the statement about liba52.
jbr
parents: 5376
diff changeset
10 * Portions of this code are derived from liba52
5316
a09b700fcfca AC-3 decoder, soc revision 56, Aug 17 14:21:58 2006 UTC by cloud9
jbr
parents: 5315
diff changeset
11 * http://liba52.sourceforge.net
5377
2020fab0e37a update license header. add copyright for myself. correct and complete the statement about liba52.
jbr
parents: 5376
diff changeset
12 * Copyright (C) 2000-2003 Michel Lespinasse <walken@zoy.org>
2020fab0e37a update license header. add copyright for myself. correct and complete the statement about liba52.
jbr
parents: 5376
diff changeset
13 * Copyright (C) 1999-2000 Aaron Holtzman <aholtzma@ess.engr.uvic.ca>
5316
a09b700fcfca AC-3 decoder, soc revision 56, Aug 17 14:21:58 2006 UTC by cloud9
jbr
parents: 5315
diff changeset
14 *
5328
5f83f09bd748 revise license header for simplicity and consistency
jbr
parents: 5326
diff changeset
15 * This file is part of FFmpeg.
5303
b8821ff5c30d AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff changeset
16 *
5328
5f83f09bd748 revise license header for simplicity and consistency
jbr
parents: 5326
diff changeset
17 * FFmpeg is free software; you can redistribute it and/or
5329
06e7dda51f65 10l to me. I accidentally removed a word.
jbr
parents: 5328
diff changeset
18 * 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
19 * 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
20 * 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
21 *
5328
5f83f09bd748 revise license header for simplicity and consistency
jbr
parents: 5326
diff changeset
22 * FFmpeg is distributed in the hope that it will be useful,
5303
b8821ff5c30d AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff changeset
23 * 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
24 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
5326
923aacd40ee8 make ac3dec.c GPL until violations are fixed
jbr
parents: 5325
diff changeset
25 * 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
26 *
5326
923aacd40ee8 make ac3dec.c GPL until violations are fixed
jbr
parents: 5325
diff changeset
27 * You should have received a copy of the GNU General Public
5328
5f83f09bd748 revise license header for simplicity and consistency
jbr
parents: 5326
diff changeset
28 * License along with FFmpeg; if not, write to the Free Software
5303
b8821ff5c30d AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff changeset
29 * 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
30 */
b8821ff5c30d AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff changeset
31
b8821ff5c30d AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff changeset
32 #include <stdio.h>
b8821ff5c30d AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff changeset
33 #include <stddef.h>
b8821ff5c30d AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff changeset
34 #include <math.h>
b8821ff5c30d AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff changeset
35 #include <string.h>
b8821ff5c30d AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff changeset
36
6763
f7cbb7733146 Use full path for #includes from another directory.
diego
parents: 6712
diff changeset
37 #include "libavutil/crc.h"
8281
f93efc084e41 Make av_log_missing_feature an internal function, and change its name
stefano
parents: 8280
diff changeset
38 #include "internal.h"
5386
d6347c3cb329 Use shared AC-3 header parsing. Move some initializations to block parsing function.
jbr
parents: 5385
diff changeset
39 #include "ac3_parser.h"
7020
40a2db8dbaa2 move the decode context and some macro constants to a new file, ac3dec.h
jbr
parents: 7019
diff changeset
40 #include "ac3dec.h"
7033
f90b89217cc9 move rematrixing band table to ac3dec_data.c
jbr
parents: 7028
diff changeset
41 #include "ac3dec_data.h"
5309
0662a270aab7 AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents: 5308
diff changeset
42
7624
545305ba44a0 rename AC3_MAX_FRAME_SIZE to AC3_FRAME_BUFFER_SIZE and increase the size
jbr
parents: 7603
diff changeset
43 /** Large enough for maximum possible frame size when the specification limit is ignored */
545305ba44a0 rename AC3_MAX_FRAME_SIZE to AC3_FRAME_BUFFER_SIZE and increase the size
jbr
parents: 7603
diff changeset
44 #define AC3_FRAME_BUFFER_SIZE 32768
6536
8f2186d5daca additional protection from segmentation faults and memory access errors by
jbr
parents: 6529
diff changeset
45
7471
1788013cf23b use the same table for ungrouping exponents and bap=2 mantissas
jbr
parents: 7470
diff changeset
46 /**
1788013cf23b use the same table for ungrouping exponents and bap=2 mantissas
jbr
parents: 7470
diff changeset
47 * table for ungrouping 3 values in 7 bits.
1788013cf23b use the same table for ungrouping exponents and bap=2 mantissas
jbr
parents: 7470
diff changeset
48 * used for exponents and bap=2 mantissas
1788013cf23b use the same table for ungrouping exponents and bap=2 mantissas
jbr
parents: 7470
diff changeset
49 */
1788013cf23b use the same table for ungrouping exponents and bap=2 mantissas
jbr
parents: 7470
diff changeset
50 static uint8_t ungroup_3_in_7_bits_tab[128][3];
5325
0d963101e0d7 AC-3 decoder, soc revision 402, Jul 14 13:45:14 2007 UTC by jbr
jbr
parents: 5324
diff changeset
51
0d963101e0d7 AC-3 decoder, soc revision 402, Jul 14 13:45:14 2007 UTC by jbr
jbr
parents: 5324
diff changeset
52
5456
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
53 /** tables for ungrouping mantissas */
6430
de7502093922 Use 24-bit fixed-point transform coefficients until just before MDCT. This
jbr
parents: 6142
diff changeset
54 static int b1_mantissas[32][3];
de7502093922 Use 24-bit fixed-point transform coefficients until just before MDCT. This
jbr
parents: 6142
diff changeset
55 static int b2_mantissas[128][3];
de7502093922 Use 24-bit fixed-point transform coefficients until just before MDCT. This
jbr
parents: 6142
diff changeset
56 static int b3_mantissas[8];
de7502093922 Use 24-bit fixed-point transform coefficients until just before MDCT. This
jbr
parents: 6142
diff changeset
57 static int b4_mantissas[128][2];
de7502093922 Use 24-bit fixed-point transform coefficients until just before MDCT. This
jbr
parents: 6142
diff changeset
58 static int b5_mantissas[16];
5325
0d963101e0d7 AC-3 decoder, soc revision 402, Jul 14 13:45:14 2007 UTC by jbr
jbr
parents: 5324
diff changeset
59
5456
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
60 /**
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
61 * Quantization table: levels for symmetric. bits for asymmetric.
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
62 * reference: Table 7.18 Mapping of bap to Quantizer
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
63 */
6006
ed7a232d570a cosmetics: rename ac3 decoder variables
jbr
parents: 6005
diff changeset
64 static const uint8_t quantization_tab[16] = {
5456
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
65 0, 3, 5, 7, 11, 15,
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
66 5, 6, 7, 8, 9, 10, 11, 12, 14, 16
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
67 };
5325
0d963101e0d7 AC-3 decoder, soc revision 402, Jul 14 13:45:14 2007 UTC by jbr
jbr
parents: 5324
diff changeset
68
5457
0a5849a4858b use table for converting dynamic range codes to scale factors
jbr
parents: 5456
diff changeset
69 /** dynamic range table. converts codes to scale factors. */
6006
ed7a232d570a cosmetics: rename ac3 decoder variables
jbr
parents: 6005
diff changeset
70 static float dynamic_range_tab[256];
5457
0a5849a4858b use table for converting dynamic range codes to scale factors
jbr
parents: 5456
diff changeset
71
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
72 /** Adjustments in dB gain */
7018
885cad616170 add more gain levels and adjust mix level tables accordingly.
jbr
parents: 7017
diff changeset
73 #define LEVEL_PLUS_3DB 1.4142135623730950
885cad616170 add more gain levels and adjust mix level tables accordingly.
jbr
parents: 7017
diff changeset
74 #define LEVEL_PLUS_1POINT5DB 1.1892071150027209
885cad616170 add more gain levels and adjust mix level tables accordingly.
jbr
parents: 7017
diff changeset
75 #define LEVEL_MINUS_1POINT5DB 0.8408964152537145
5325
0d963101e0d7 AC-3 decoder, soc revision 402, Jul 14 13:45:14 2007 UTC by jbr
jbr
parents: 5324
diff changeset
76 #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
77 #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
78 #define LEVEL_MINUS_6DB 0.5000000000000000
5480
930bca6dd95f add support for downmixing to stereo or mono
jbr
parents: 5479
diff changeset
79 #define LEVEL_MINUS_9DB 0.3535533905932738
5325
0d963101e0d7 AC-3 decoder, soc revision 402, Jul 14 13:45:14 2007 UTC by jbr
jbr
parents: 5324
diff changeset
80 #define LEVEL_ZERO 0.0000000000000000
5480
930bca6dd95f add support for downmixing to stereo or mono
jbr
parents: 5479
diff changeset
81 #define LEVEL_ONE 1.0000000000000000
930bca6dd95f add support for downmixing to stereo or mono
jbr
parents: 5479
diff changeset
82
7018
885cad616170 add more gain levels and adjust mix level tables accordingly.
jbr
parents: 7017
diff changeset
83 static const float gain_levels[9] = {
885cad616170 add more gain levels and adjust mix level tables accordingly.
jbr
parents: 7017
diff changeset
84 LEVEL_PLUS_3DB,
885cad616170 add more gain levels and adjust mix level tables accordingly.
jbr
parents: 7017
diff changeset
85 LEVEL_PLUS_1POINT5DB,
5480
930bca6dd95f add support for downmixing to stereo or mono
jbr
parents: 5479
diff changeset
86 LEVEL_ONE,
7018
885cad616170 add more gain levels and adjust mix level tables accordingly.
jbr
parents: 7017
diff changeset
87 LEVEL_MINUS_1POINT5DB,
5480
930bca6dd95f add support for downmixing to stereo or mono
jbr
parents: 5479
diff changeset
88 LEVEL_MINUS_3DB,
930bca6dd95f add support for downmixing to stereo or mono
jbr
parents: 5479
diff changeset
89 LEVEL_MINUS_4POINT5DB,
930bca6dd95f add support for downmixing to stereo or mono
jbr
parents: 5479
diff changeset
90 LEVEL_MINUS_6DB,
7018
885cad616170 add more gain levels and adjust mix level tables accordingly.
jbr
parents: 7017
diff changeset
91 LEVEL_ZERO,
5480
930bca6dd95f add support for downmixing to stereo or mono
jbr
parents: 5479
diff changeset
92 LEVEL_MINUS_9DB
930bca6dd95f add support for downmixing to stereo or mono
jbr
parents: 5479
diff changeset
93 };
930bca6dd95f add support for downmixing to stereo or mono
jbr
parents: 5479
diff changeset
94
930bca6dd95f add support for downmixing to stereo or mono
jbr
parents: 5479
diff changeset
95 /**
7019
81d5c68233e5 move mix level tables from parser to decoder. have parser read bitstream value instead of using an index to a table in the decoder.
jbr
parents: 7018
diff changeset
96 * Table for center mix levels
81d5c68233e5 move mix level tables from parser to decoder. have parser read bitstream value instead of using an index to a table in the decoder.
jbr
parents: 7018
diff changeset
97 * reference: Section 5.4.2.4 cmixlev
81d5c68233e5 move mix level tables from parser to decoder. have parser read bitstream value instead of using an index to a table in the decoder.
jbr
parents: 7018
diff changeset
98 */
81d5c68233e5 move mix level tables from parser to decoder. have parser read bitstream value instead of using an index to a table in the decoder.
jbr
parents: 7018
diff changeset
99 static const uint8_t center_levels[4] = { 4, 5, 6, 5 };
81d5c68233e5 move mix level tables from parser to decoder. have parser read bitstream value instead of using an index to a table in the decoder.
jbr
parents: 7018
diff changeset
100
81d5c68233e5 move mix level tables from parser to decoder. have parser read bitstream value instead of using an index to a table in the decoder.
jbr
parents: 7018
diff changeset
101 /**
81d5c68233e5 move mix level tables from parser to decoder. have parser read bitstream value instead of using an index to a table in the decoder.
jbr
parents: 7018
diff changeset
102 * Table for surround mix levels
81d5c68233e5 move mix level tables from parser to decoder. have parser read bitstream value instead of using an index to a table in the decoder.
jbr
parents: 7018
diff changeset
103 * reference: Section 5.4.2.5 surmixlev
81d5c68233e5 move mix level tables from parser to decoder. have parser read bitstream value instead of using an index to a table in the decoder.
jbr
parents: 7018
diff changeset
104 */
81d5c68233e5 move mix level tables from parser to decoder. have parser read bitstream value instead of using an index to a table in the decoder.
jbr
parents: 7018
diff changeset
105 static const uint8_t surround_levels[4] = { 4, 6, 7, 6 };
81d5c68233e5 move mix level tables from parser to decoder. have parser read bitstream value instead of using an index to a table in the decoder.
jbr
parents: 7018
diff changeset
106
81d5c68233e5 move mix level tables from parser to decoder. have parser read bitstream value instead of using an index to a table in the decoder.
jbr
parents: 7018
diff changeset
107 /**
5480
930bca6dd95f add support for downmixing to stereo or mono
jbr
parents: 5479
diff changeset
108 * Table for default stereo downmixing coefficients
930bca6dd95f add support for downmixing to stereo or mono
jbr
parents: 5479
diff changeset
109 * reference: Section 7.8.2 Downmixing Into Two Channels
930bca6dd95f add support for downmixing to stereo or mono
jbr
parents: 5479
diff changeset
110 */
930bca6dd95f add support for downmixing to stereo or mono
jbr
parents: 5479
diff changeset
111 static const uint8_t ac3_default_coeffs[8][5][2] = {
7018
885cad616170 add more gain levels and adjust mix level tables accordingly.
jbr
parents: 7017
diff changeset
112 { { 2, 7 }, { 7, 2 }, },
885cad616170 add more gain levels and adjust mix level tables accordingly.
jbr
parents: 7017
diff changeset
113 { { 4, 4 }, },
885cad616170 add more gain levels and adjust mix level tables accordingly.
jbr
parents: 7017
diff changeset
114 { { 2, 7 }, { 7, 2 }, },
885cad616170 add more gain levels and adjust mix level tables accordingly.
jbr
parents: 7017
diff changeset
115 { { 2, 7 }, { 5, 5 }, { 7, 2 }, },
885cad616170 add more gain levels and adjust mix level tables accordingly.
jbr
parents: 7017
diff changeset
116 { { 2, 7 }, { 7, 2 }, { 6, 6 }, },
885cad616170 add more gain levels and adjust mix level tables accordingly.
jbr
parents: 7017
diff changeset
117 { { 2, 7 }, { 5, 5 }, { 7, 2 }, { 8, 8 }, },
885cad616170 add more gain levels and adjust mix level tables accordingly.
jbr
parents: 7017
diff changeset
118 { { 2, 7 }, { 7, 2 }, { 6, 7 }, { 7, 6 }, },
885cad616170 add more gain levels and adjust mix level tables accordingly.
jbr
parents: 7017
diff changeset
119 { { 2, 7 }, { 5, 5 }, { 7, 2 }, { 6, 7 }, { 7, 6 }, },
5480
930bca6dd95f add support for downmixing to stereo or mono
jbr
parents: 5479
diff changeset
120 };
5325
0d963101e0d7 AC-3 decoder, soc revision 402, Jul 14 13:45:14 2007 UTC by jbr
jbr
parents: 5324
diff changeset
121
5310
9aa9197034d7 AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents: 5309
diff changeset
122 /**
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
123 * Symmetrical Dequantization
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
124 * reference: Section 7.3.3 Expansion of Mantissas for Symmetrical Quantization
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
125 * Tables 7.19 to 7.23
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
126 */
6430
de7502093922 Use 24-bit fixed-point transform coefficients until just before MDCT. This
jbr
parents: 6142
diff changeset
127 static inline int
5456
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
128 symmetric_dequant(int code, int levels)
5309
0662a270aab7 AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents: 5308
diff changeset
129 {
6430
de7502093922 Use 24-bit fixed-point transform coefficients until just before MDCT. This
jbr
parents: 6142
diff changeset
130 return ((code - (levels >> 1)) << 24) / levels;
5309
0662a270aab7 AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents: 5308
diff changeset
131 }
0662a270aab7 AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents: 5308
diff changeset
132
5321
fcb2a52c88fe AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents: 5320
diff changeset
133 /*
fcb2a52c88fe AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents: 5320
diff changeset
134 * 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
135 */
6517
48759bfbd073 Apply 'cold' attribute to init/uninit functions in libavcodec
zuxy
parents: 6487
diff changeset
136 static av_cold 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
137 {
5375
7659a1acfba4 new implementation of exponent decoding
jbr
parents: 5374
diff changeset
138 int i;
5309
0662a270aab7 AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents: 5308
diff changeset
139
7471
1788013cf23b use the same table for ungrouping exponents and bap=2 mantissas
jbr
parents: 7470
diff changeset
140 /* generate table for ungrouping 3 values in 7 bits
1788013cf23b use the same table for ungrouping exponents and bap=2 mantissas
jbr
parents: 7470
diff changeset
141 reference: Section 7.1.3 Exponent Decoding */
1788013cf23b use the same table for ungrouping exponents and bap=2 mantissas
jbr
parents: 7470
diff changeset
142 for(i=0; i<128; i++) {
1788013cf23b use the same table for ungrouping exponents and bap=2 mantissas
jbr
parents: 7470
diff changeset
143 ungroup_3_in_7_bits_tab[i][0] = i / 25;
1788013cf23b use the same table for ungrouping exponents and bap=2 mantissas
jbr
parents: 7470
diff changeset
144 ungroup_3_in_7_bits_tab[i][1] = (i % 25) / 5;
1788013cf23b use the same table for ungrouping exponents and bap=2 mantissas
jbr
parents: 7470
diff changeset
145 ungroup_3_in_7_bits_tab[i][2] = (i % 25) % 5;
1788013cf23b use the same table for ungrouping exponents and bap=2 mantissas
jbr
parents: 7470
diff changeset
146 }
1788013cf23b use the same table for ungrouping exponents and bap=2 mantissas
jbr
parents: 7470
diff changeset
147
5456
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
148 /* generate grouped mantissa tables
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
149 reference: Section 7.3.5 Ungrouping of Mantissas */
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
150 for(i=0; i<32; i++) {
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
151 /* bap=1 mantissas */
7472
83c16f531a90 Hardcode the table for ungrouping 3 values in 5 bits. It will be reused by
jbr
parents: 7471
diff changeset
152 b1_mantissas[i][0] = symmetric_dequant(ff_ac3_ungroup_3_in_5_bits_tab[i][0], 3);
83c16f531a90 Hardcode the table for ungrouping 3 values in 5 bits. It will be reused by
jbr
parents: 7471
diff changeset
153 b1_mantissas[i][1] = symmetric_dequant(ff_ac3_ungroup_3_in_5_bits_tab[i][1], 3);
83c16f531a90 Hardcode the table for ungrouping 3 values in 5 bits. It will be reused by
jbr
parents: 7471
diff changeset
154 b1_mantissas[i][2] = symmetric_dequant(ff_ac3_ungroup_3_in_5_bits_tab[i][2], 3);
5456
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
155 }
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
156 for(i=0; i<128; i++) {
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
157 /* bap=2 mantissas */
7471
1788013cf23b use the same table for ungrouping exponents and bap=2 mantissas
jbr
parents: 7470
diff changeset
158 b2_mantissas[i][0] = symmetric_dequant(ungroup_3_in_7_bits_tab[i][0], 5);
1788013cf23b use the same table for ungrouping exponents and bap=2 mantissas
jbr
parents: 7470
diff changeset
159 b2_mantissas[i][1] = symmetric_dequant(ungroup_3_in_7_bits_tab[i][1], 5);
1788013cf23b use the same table for ungrouping exponents and bap=2 mantissas
jbr
parents: 7470
diff changeset
160 b2_mantissas[i][2] = symmetric_dequant(ungroup_3_in_7_bits_tab[i][2], 5);
5309
0662a270aab7 AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents: 5308
diff changeset
161
5456
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
162 /* bap=4 mantissas */
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
163 b4_mantissas[i][0] = symmetric_dequant(i / 11, 11);
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
164 b4_mantissas[i][1] = symmetric_dequant(i % 11, 11);
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
165 }
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
166 /* generate ungrouped mantissa tables
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
167 reference: Tables 7.21 and 7.23 */
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
168 for(i=0; i<7; i++) {
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
169 /* bap=3 mantissas */
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
170 b3_mantissas[i] = symmetric_dequant(i, 7);
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
171 }
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
172 for(i=0; i<15; i++) {
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
173 /* bap=5 mantissas */
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
174 b5_mantissas[i] = symmetric_dequant(i, 15);
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
175 }
5321
fcb2a52c88fe AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents: 5320
diff changeset
176
5457
0a5849a4858b use table for converting dynamic range codes to scale factors
jbr
parents: 5456
diff changeset
177 /* generate dynamic range table
0a5849a4858b use table for converting dynamic range codes to scale factors
jbr
parents: 5456
diff changeset
178 reference: Section 7.7.1 Dynamic Range Control */
0a5849a4858b use table for converting dynamic range codes to scale factors
jbr
parents: 5456
diff changeset
179 for(i=0; i<256; i++) {
0a5849a4858b use table for converting dynamic range codes to scale factors
jbr
parents: 5456
diff changeset
180 int v = (i >> 5) - ((i >> 7) << 3) - 5;
6006
ed7a232d570a cosmetics: rename ac3 decoder variables
jbr
parents: 6005
diff changeset
181 dynamic_range_tab[i] = powf(2.0f, v) * ((i & 0x1F) | 0x20);
5457
0a5849a4858b use table for converting dynamic range codes to scale factors
jbr
parents: 5456
diff changeset
182 }
5305
5892b4a6380b AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents: 5304
diff changeset
183 }
5892b4a6380b AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents: 5304
diff changeset
184
5304
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
185
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
186 /**
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
187 * AVCodec initialization
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
188 */
6517
48759bfbd073 Apply 'cold' attribute to init/uninit functions in libavcodec
zuxy
parents: 6487
diff changeset
189 static av_cold int ac3_decode_init(AVCodecContext *avctx)
5304
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
190 {
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
191 AC3DecodeContext *s = avctx->priv_data;
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
192 s->avctx = avctx;
5304
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
193
5331
b24bcdd0ae86 move some common values to ac3.h and utilize them
jbr
parents: 5330
diff changeset
194 ac3_common_init();
5309
0662a270aab7 AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents: 5308
diff changeset
195 ac3_tables_init();
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
196 ff_mdct_init(&s->imdct_256, 8, 1);
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
197 ff_mdct_init(&s->imdct_512, 9, 1);
6142
a35b838ab955 Add variable alpha and size of half window for Kaiser-Bessel Derived window
superdump
parents: 6139
diff changeset
198 ff_kbd_window_init(s->window, 5.0, 256);
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
199 dsputil_init(&s->dsp, avctx);
7601
69d5f318275f use LFG instead of Mersenne Twister for AC-3 PRNG
jbr
parents: 7594
diff changeset
200 av_lfg_init(&s->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
201
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
202 /* set bias values for float to int16 conversion */
7550
f9e4afa46993 use float_to_int16_interleave in ac3
lorenm
parents: 7549
diff changeset
203 if(s->dsp.float_to_int16_interleave == ff_float_to_int16_interleave_c) {
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
204 s->add_bias = 385.0f;
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
205 s->mul_bias = 1.0f;
5479
943c732c905d use dsputil for float to signed 16-bit sample conversion
jbr
parents: 5477
diff changeset
206 } else {
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
207 s->add_bias = 0.0f;
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
208 s->mul_bias = 32767.0f;
5479
943c732c905d use dsputil for float to signed 16-bit sample conversion
jbr
parents: 5477
diff changeset
209 }
943c732c905d use dsputil for float to signed 16-bit sample conversion
jbr
parents: 5477
diff changeset
210
6112
1e77145f9c74 check for request_channels at codec init
jbr
parents: 6108
diff changeset
211 /* allow downmixing to stereo or mono */
1e77145f9c74 check for request_channels at codec init
jbr
parents: 6108
diff changeset
212 if (avctx->channels > 0 && avctx->request_channels > 0 &&
1e77145f9c74 check for request_channels at codec init
jbr
parents: 6108
diff changeset
213 avctx->request_channels < avctx->channels &&
1e77145f9c74 check for request_channels at codec init
jbr
parents: 6108
diff changeset
214 avctx->request_channels <= 2) {
1e77145f9c74 check for request_channels at codec init
jbr
parents: 6108
diff changeset
215 avctx->channels = avctx->request_channels;
1e77145f9c74 check for request_channels at codec init
jbr
parents: 6108
diff changeset
216 }
6480
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
217 s->downmixed = 1;
6112
1e77145f9c74 check for request_channels at codec init
jbr
parents: 6108
diff changeset
218
6538
b8f886bce6f5 only allocate context input buffer if AVCodecContext.error_reslience is greater than 0.
jbr
parents: 6537
diff changeset
219 /* allocate context input buffer */
7831
8195c970d077 Rename error_resilience to error_recognition.
michael
parents: 7769
diff changeset
220 if (avctx->error_recognition >= FF_ER_CAREFUL) {
7624
545305ba44a0 rename AC3_MAX_FRAME_SIZE to AC3_FRAME_BUFFER_SIZE and increase the size
jbr
parents: 7603
diff changeset
221 s->input_buffer = av_mallocz(AC3_FRAME_BUFFER_SIZE + FF_INPUT_BUFFER_PADDING_SIZE);
6538
b8f886bce6f5 only allocate context input buffer if AVCodecContext.error_reslience is greater than 0.
jbr
parents: 6537
diff changeset
222 if (!s->input_buffer)
b8f886bce6f5 only allocate context input buffer if AVCodecContext.error_reslience is greater than 0.
jbr
parents: 6537
diff changeset
223 return AVERROR_NOMEM;
b8f886bce6f5 only allocate context input buffer if AVCodecContext.error_reslience is greater than 0.
jbr
parents: 6537
diff changeset
224 }
b8f886bce6f5 only allocate context input buffer if AVCodecContext.error_reslience is greater than 0.
jbr
parents: 6537
diff changeset
225
7451
85ab7655ad4d Modify all codecs to report their supported input and output sample format(s).
pross
parents: 7328
diff changeset
226 avctx->sample_fmt = SAMPLE_FMT_S16;
5304
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
227 return 0;
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
228 }
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
229
5386
d6347c3cb329 Use shared AC-3 header parsing. Move some initializations to block parsing function.
jbr
parents: 5385
diff changeset
230 /**
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
231 * Parse the 'sync info' and 'bit stream info' from the AC-3 bitstream.
5321
fcb2a52c88fe AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents: 5320
diff changeset
232 * GetBitContext within AC3DecodeContext must point to
7470
1a93d3bbe3ee cosmetics: make all references to AC-3 capitalized and hyphenated
jbr
parents: 7451
diff changeset
233 * the start of the synchronized AC-3 bitstream.
5321
fcb2a52c88fe AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents: 5320
diff changeset
234 */
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
235 static int ac3_parse_header(AC3DecodeContext *s)
5303
b8821ff5c30d AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff changeset
236 {
7028
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
237 GetBitContext *gbc = &s->gbc;
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
238 int i;
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
239
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
240 /* read the rest of the bsi. read twice for dual mono mode. */
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
241 i = !(s->channel_mode);
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
242 do {
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
243 skip_bits(gbc, 5); // skip dialog normalization
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
244 if (get_bits1(gbc))
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
245 skip_bits(gbc, 8); //skip compression
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
246 if (get_bits1(gbc))
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
247 skip_bits(gbc, 8); //skip language code
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
248 if (get_bits1(gbc))
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
249 skip_bits(gbc, 7); //skip audio production information
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
250 } while (i--);
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
251
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
252 skip_bits(gbc, 2); //skip copyright bit and original bitstream bit
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
253
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
254 /* skip the timecodes (or extra bitstream information for Alternate Syntax)
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
255 TODO: read & use the xbsi1 downmix levels */
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
256 if (get_bits1(gbc))
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
257 skip_bits(gbc, 14); //skip timecode1 / xbsi1
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
258 if (get_bits1(gbc))
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
259 skip_bits(gbc, 14); //skip timecode2 / xbsi2
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
260
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
261 /* skip additional bitstream info */
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
262 if (get_bits1(gbc)) {
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
263 i = get_bits(gbc, 6);
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
264 do {
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
265 skip_bits(gbc, 8);
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
266 } while(i--);
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
267 }
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
268
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
269 return 0;
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
270 }
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
271
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
272 /**
7470
1a93d3bbe3ee cosmetics: make all references to AC-3 capitalized and hyphenated
jbr
parents: 7451
diff changeset
273 * Common function to parse AC-3 or E-AC-3 frame header
7028
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
274 */
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
275 static int parse_frame_header(AC3DecodeContext *s)
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
276 {
5386
d6347c3cb329 Use shared AC-3 header parsing. Move some initializations to block parsing function.
jbr
parents: 5385
diff changeset
277 AC3HeaderInfo hdr;
7028
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
278 int err;
5309
0662a270aab7 AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents: 5308
diff changeset
279
7489
f6260f8362f6 remove unneeded local variable
jbr
parents: 7473
diff changeset
280 err = ff_ac3_parse_header(&s->gbc, &hdr);
5386
d6347c3cb329 Use shared AC-3 header parsing. Move some initializations to block parsing function.
jbr
parents: 5385
diff changeset
281 if(err)
d6347c3cb329 Use shared AC-3 header parsing. Move some initializations to block parsing function.
jbr
parents: 5385
diff changeset
282 return err;
5305
5892b4a6380b AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents: 5304
diff changeset
283
5386
d6347c3cb329 Use shared AC-3 header parsing. Move some initializations to block parsing function.
jbr
parents: 5385
diff changeset
284 /* get decoding parameters from header info */
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
285 s->bit_alloc_params.sr_code = hdr.sr_code;
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
286 s->channel_mode = hdr.channel_mode;
6091
c365f7b83133 cosmetics: vertical realignment after last commit
jbr
parents: 6090
diff changeset
287 s->lfe_on = hdr.lfe_on;
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
288 s->bit_alloc_params.sr_shift = hdr.sr_shift;
6093
5562b898db5b cosmetics: rename sampling_rate to sample_rate
jbr
parents: 6092
diff changeset
289 s->sample_rate = hdr.sample_rate;
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
290 s->bit_rate = hdr.bit_rate;
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
291 s->channels = hdr.channels;
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
292 s->fbw_channels = s->channels - s->lfe_on;
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
293 s->lfe_ch = s->fbw_channels + 1;
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
294 s->frame_size = hdr.frame_size;
6661
a409fbf1f42b change ff_ac3_parse_header() to take a GetBitContext instead of const char*
bwolowiec
parents: 6540
diff changeset
295 s->center_mix_level = hdr.center_mix_level;
a409fbf1f42b change ff_ac3_parse_header() to take a GetBitContext instead of const char*
bwolowiec
parents: 6540
diff changeset
296 s->surround_mix_level = hdr.surround_mix_level;
7011
77f607fb4e8b get the number of blocks from the ac3 parser and use in the ac3 decoder.
jbr
parents: 6999
diff changeset
297 s->num_blocks = hdr.num_blocks;
7013
d07912ff7dcd read frame type from header info into decode context
jbr
parents: 7012
diff changeset
298 s->frame_type = hdr.frame_type;
7012
4156c54aedba get substreamid from ac3 parser
jbr
parents: 7011
diff changeset
299 s->substreamid = hdr.substreamid;
5412
3f6a6dda6b2d remove broken downmixing. will add new implementation later.
jbr
parents: 5393
diff changeset
300
6958
1c523b5212cd set lfe params at frame init instead of in every block
jbr
parents: 6957
diff changeset
301 if(s->lfe_on) {
1c523b5212cd set lfe params at frame init instead of in every block
jbr
parents: 6957
diff changeset
302 s->start_freq[s->lfe_ch] = 0;
1c523b5212cd set lfe params at frame init instead of in every block
jbr
parents: 6957
diff changeset
303 s->end_freq[s->lfe_ch] = 7;
1c523b5212cd set lfe params at frame init instead of in every block
jbr
parents: 6957
diff changeset
304 s->num_exp_groups[s->lfe_ch] = 2;
1c523b5212cd set lfe params at frame init instead of in every block
jbr
parents: 6957
diff changeset
305 s->channel_in_cpl[s->lfe_ch] = 0;
1c523b5212cd set lfe params at frame init instead of in every block
jbr
parents: 6957
diff changeset
306 }
1c523b5212cd set lfe params at frame init instead of in every block
jbr
parents: 6957
diff changeset
307
7626
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
308 if (hdr.bitstream_id <= 10) {
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
309 s->eac3 = 0;
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
310 s->snr_offset_strategy = 2;
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
311 s->block_switch_syntax = 1;
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
312 s->dither_flag_syntax = 1;
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
313 s->bit_allocation_syntax = 1;
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
314 s->fast_gain_syntax = 0;
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
315 s->first_cpl_leak = 0;
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
316 s->dba_syntax = 1;
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
317 s->skip_syntax = 1;
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
318 memset(s->channel_uses_aht, 0, sizeof(s->channel_uses_aht));
7627
93c5703328d6 cosmetics: indentation
jbr
parents: 7626
diff changeset
319 return ac3_parse_header(s);
7626
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
320 } else {
7756
2994fe74068f turn on E-AC-3 decoding support and update the Changelog
jbr
parents: 7749
diff changeset
321 s->eac3 = 1;
2994fe74068f turn on E-AC-3 decoding support and update the Changelog
jbr
parents: 7749
diff changeset
322 return ff_eac3_parse_header(s);
7626
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
323 }
6126
c24cd5282108 split out init of downmix coeffs into a separate function that can be called
jbr
parents: 6125
diff changeset
324 }
c24cd5282108 split out init of downmix coeffs into a separate function that can be called
jbr
parents: 6125
diff changeset
325
c24cd5282108 split out init of downmix coeffs into a separate function that can be called
jbr
parents: 6125
diff changeset
326 /**
c24cd5282108 split out init of downmix coeffs into a separate function that can be called
jbr
parents: 6125
diff changeset
327 * Set stereo downmixing coefficients based on frame header info.
c24cd5282108 split out init of downmix coeffs into a separate function that can be called
jbr
parents: 6125
diff changeset
328 * reference: Section 7.8.2 Downmixing Into Two Channels
c24cd5282108 split out init of downmix coeffs into a separate function that can be called
jbr
parents: 6125
diff changeset
329 */
c24cd5282108 split out init of downmix coeffs into a separate function that can be called
jbr
parents: 6125
diff changeset
330 static void set_downmix_coeffs(AC3DecodeContext *s)
c24cd5282108 split out init of downmix coeffs into a separate function that can be called
jbr
parents: 6125
diff changeset
331 {
c24cd5282108 split out init of downmix coeffs into a separate function that can be called
jbr
parents: 6125
diff changeset
332 int i;
7019
81d5c68233e5 move mix level tables from parser to decoder. have parser read bitstream value instead of using an index to a table in the decoder.
jbr
parents: 7018
diff changeset
333 float cmix = gain_levels[center_levels[s->center_mix_level]];
81d5c68233e5 move mix level tables from parser to decoder. have parser read bitstream value instead of using an index to a table in the decoder.
jbr
parents: 7018
diff changeset
334 float smix = gain_levels[surround_levels[s->surround_mix_level]];
7554
96d57e3b78e5 optimize ac3_downmix.
lorenm
parents: 7550
diff changeset
335 float norm0, norm1;
6126
c24cd5282108 split out init of downmix coeffs into a separate function that can be called
jbr
parents: 6125
diff changeset
336
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
337 for(i=0; i<s->fbw_channels; i++) {
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
338 s->downmix_coeffs[i][0] = gain_levels[ac3_default_coeffs[s->channel_mode][i][0]];
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
339 s->downmix_coeffs[i][1] = gain_levels[ac3_default_coeffs[s->channel_mode][i][1]];
5480
930bca6dd95f add support for downmixing to stereo or mono
jbr
parents: 5479
diff changeset
340 }
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
341 if(s->channel_mode > 1 && s->channel_mode & 1) {
6126
c24cd5282108 split out init of downmix coeffs into a separate function that can be called
jbr
parents: 6125
diff changeset
342 s->downmix_coeffs[1][0] = s->downmix_coeffs[1][1] = cmix;
5480
930bca6dd95f add support for downmixing to stereo or mono
jbr
parents: 5479
diff changeset
343 }
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
344 if(s->channel_mode == AC3_CHMODE_2F1R || s->channel_mode == AC3_CHMODE_3F1R) {
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
345 int nf = s->channel_mode - 2;
6126
c24cd5282108 split out init of downmix coeffs into a separate function that can be called
jbr
parents: 6125
diff changeset
346 s->downmix_coeffs[nf][0] = s->downmix_coeffs[nf][1] = smix * LEVEL_MINUS_3DB;
5480
930bca6dd95f add support for downmixing to stereo or mono
jbr
parents: 5479
diff changeset
347 }
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
348 if(s->channel_mode == AC3_CHMODE_2F2R || s->channel_mode == AC3_CHMODE_3F2R) {
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
349 int nf = s->channel_mode - 4;
6126
c24cd5282108 split out init of downmix coeffs into a separate function that can be called
jbr
parents: 6125
diff changeset
350 s->downmix_coeffs[nf][0] = s->downmix_coeffs[nf+1][1] = smix;
5480
930bca6dd95f add support for downmixing to stereo or mono
jbr
parents: 5479
diff changeset
351 }
6431
305c49259b59 pre-calculate downmix coefficient sums. 2% faster 5.1-to-stereo downmixing.
jbr
parents: 6430
diff changeset
352
7554
96d57e3b78e5 optimize ac3_downmix.
lorenm
parents: 7550
diff changeset
353 /* renormalize */
96d57e3b78e5 optimize ac3_downmix.
lorenm
parents: 7550
diff changeset
354 norm0 = norm1 = 0.0;
96d57e3b78e5 optimize ac3_downmix.
lorenm
parents: 7550
diff changeset
355 for(i=0; i<s->fbw_channels; i++) {
96d57e3b78e5 optimize ac3_downmix.
lorenm
parents: 7550
diff changeset
356 norm0 += s->downmix_coeffs[i][0];
96d57e3b78e5 optimize ac3_downmix.
lorenm
parents: 7550
diff changeset
357 norm1 += s->downmix_coeffs[i][1];
96d57e3b78e5 optimize ac3_downmix.
lorenm
parents: 7550
diff changeset
358 }
96d57e3b78e5 optimize ac3_downmix.
lorenm
parents: 7550
diff changeset
359 norm0 = 1.0f / norm0;
96d57e3b78e5 optimize ac3_downmix.
lorenm
parents: 7550
diff changeset
360 norm1 = 1.0f / norm1;
6431
305c49259b59 pre-calculate downmix coefficient sums. 2% faster 5.1-to-stereo downmixing.
jbr
parents: 6430
diff changeset
361 for(i=0; i<s->fbw_channels; i++) {
7554
96d57e3b78e5 optimize ac3_downmix.
lorenm
parents: 7550
diff changeset
362 s->downmix_coeffs[i][0] *= norm0;
96d57e3b78e5 optimize ac3_downmix.
lorenm
parents: 7550
diff changeset
363 s->downmix_coeffs[i][1] *= norm1;
6431
305c49259b59 pre-calculate downmix coefficient sums. 2% faster 5.1-to-stereo downmixing.
jbr
parents: 6430
diff changeset
364 }
7554
96d57e3b78e5 optimize ac3_downmix.
lorenm
parents: 7550
diff changeset
365
96d57e3b78e5 optimize ac3_downmix.
lorenm
parents: 7550
diff changeset
366 if(s->output_mode == AC3_CHMODE_MONO) {
96d57e3b78e5 optimize ac3_downmix.
lorenm
parents: 7550
diff changeset
367 for(i=0; i<s->fbw_channels; i++)
96d57e3b78e5 optimize ac3_downmix.
lorenm
parents: 7550
diff changeset
368 s->downmix_coeffs[i][0] = (s->downmix_coeffs[i][0] + s->downmix_coeffs[i][1]) * LEVEL_MINUS_3DB;
96d57e3b78e5 optimize ac3_downmix.
lorenm
parents: 7550
diff changeset
369 }
5303
b8821ff5c30d AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff changeset
370 }
b8821ff5c30d AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff changeset
371
5376
83682d6837e4 revise comment for exponent decoding function
jbr
parents: 5375
diff changeset
372 /**
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
373 * Decode the grouped exponents according to exponent strategy.
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
374 * reference: Section 7.1.3 Exponent Decoding
5304
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
375 */
8268
4dd63fc58a87 ac3dec: detect out-of-range exponents
jbr
parents: 8255
diff changeset
376 static int decode_exponents(GetBitContext *gbc, int exp_strategy, int ngrps,
8270
0fc2b35a1c14 cosmetics: vertical alignment
jbr
parents: 8269
diff changeset
377 uint8_t absexp, int8_t *dexps)
5304
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
378 {
6006
ed7a232d570a cosmetics: rename ac3 decoder variables
jbr
parents: 6005
diff changeset
379 int i, j, grp, group_size;
5375
7659a1acfba4 new implementation of exponent decoding
jbr
parents: 5374
diff changeset
380 int dexp[256];
7659a1acfba4 new implementation of exponent decoding
jbr
parents: 5374
diff changeset
381 int expacc, prevexp;
5305
5892b4a6380b AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents: 5304
diff changeset
382
5375
7659a1acfba4 new implementation of exponent decoding
jbr
parents: 5374
diff changeset
383 /* unpack groups */
6006
ed7a232d570a cosmetics: rename ac3 decoder variables
jbr
parents: 6005
diff changeset
384 group_size = exp_strategy + (exp_strategy == EXP_D45);
5375
7659a1acfba4 new implementation of exponent decoding
jbr
parents: 5374
diff changeset
385 for(grp=0,i=0; grp<ngrps; grp++) {
6089
12a77958941f cosmetics: rename GetBitContext gb to gbc
jbr
parents: 6088
diff changeset
386 expacc = get_bits(gbc, 7);
7471
1788013cf23b use the same table for ungrouping exponents and bap=2 mantissas
jbr
parents: 7470
diff changeset
387 dexp[i++] = ungroup_3_in_7_bits_tab[expacc][0];
1788013cf23b use the same table for ungrouping exponents and bap=2 mantissas
jbr
parents: 7470
diff changeset
388 dexp[i++] = ungroup_3_in_7_bits_tab[expacc][1];
1788013cf23b use the same table for ungrouping exponents and bap=2 mantissas
jbr
parents: 7470
diff changeset
389 dexp[i++] = ungroup_3_in_7_bits_tab[expacc][2];
5375
7659a1acfba4 new implementation of exponent decoding
jbr
parents: 5374
diff changeset
390 }
5303
b8821ff5c30d AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff changeset
391
5375
7659a1acfba4 new implementation of exponent decoding
jbr
parents: 5374
diff changeset
392 /* convert to absolute exps and expand groups */
7659a1acfba4 new implementation of exponent decoding
jbr
parents: 5374
diff changeset
393 prevexp = absexp;
8271
52af55b08c1d ac3dec: unroll inner loop in exponent decoding. 46% faster decode_exponents().
jbr
parents: 8270
diff changeset
394 for(i=0,j=0; i<ngrps*3; i++) {
8268
4dd63fc58a87 ac3dec: detect out-of-range exponents
jbr
parents: 8255
diff changeset
395 prevexp += dexp[i] - 2;
8275
e2ef97f0ab4b ac3dec: simplify exponent bounds checking
jbr
parents: 8271
diff changeset
396 if (prevexp > 24U)
8268
4dd63fc58a87 ac3dec: detect out-of-range exponents
jbr
parents: 8255
diff changeset
397 return -1;
8271
52af55b08c1d ac3dec: unroll inner loop in exponent decoding. 46% faster decode_exponents().
jbr
parents: 8270
diff changeset
398 switch (group_size) {
52af55b08c1d ac3dec: unroll inner loop in exponent decoding. 46% faster decode_exponents().
jbr
parents: 8270
diff changeset
399 case 4: dexps[j++] = prevexp;
52af55b08c1d ac3dec: unroll inner loop in exponent decoding. 46% faster decode_exponents().
jbr
parents: 8270
diff changeset
400 dexps[j++] = prevexp;
52af55b08c1d ac3dec: unroll inner loop in exponent decoding. 46% faster decode_exponents().
jbr
parents: 8270
diff changeset
401 case 2: dexps[j++] = prevexp;
52af55b08c1d ac3dec: unroll inner loop in exponent decoding. 46% faster decode_exponents().
jbr
parents: 8270
diff changeset
402 case 1: dexps[j++] = prevexp;
5304
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
403 }
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
404 }
8268
4dd63fc58a87 ac3dec: detect out-of-range exponents
jbr
parents: 8255
diff changeset
405 return 0;
5303
b8821ff5c30d AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff changeset
406 }
b8821ff5c30d AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff changeset
407
5451
19bb5e64a57c split out coupling coefficient reconstruction into a separate function
jbr
parents: 5435
diff changeset
408 /**
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
409 * Generate transform coefficients for each coupled channel in the coupling
5451
19bb5e64a57c split out coupling coefficient reconstruction into a separate function
jbr
parents: 5435
diff changeset
410 * range using the coupling coefficients and coupling coordinates.
19bb5e64a57c split out coupling coefficient reconstruction into a separate function
jbr
parents: 5435
diff changeset
411 * reference: Section 7.4.3 Coupling Coordinate Format
19bb5e64a57c split out coupling coefficient reconstruction into a separate function
jbr
parents: 5435
diff changeset
412 */
7491
0dbdc638270e cosmetics: use a better function name than uncouple_channels()
jbr
parents: 7490
diff changeset
413 static void calc_transform_coeffs_cpl(AC3DecodeContext *s)
5451
19bb5e64a57c split out coupling coefficient reconstruction into a separate function
jbr
parents: 5435
diff changeset
414 {
19bb5e64a57c split out coupling coefficient reconstruction into a separate function
jbr
parents: 5435
diff changeset
415 int i, j, ch, bnd, subbnd;
19bb5e64a57c split out coupling coefficient reconstruction into a separate function
jbr
parents: 5435
diff changeset
416
19bb5e64a57c split out coupling coefficient reconstruction into a separate function
jbr
parents: 5435
diff changeset
417 subbnd = -1;
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
418 i = s->start_freq[CPL_CH];
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
419 for(bnd=0; bnd<s->num_cpl_bands; bnd++) {
5451
19bb5e64a57c split out coupling coefficient reconstruction into a separate function
jbr
parents: 5435
diff changeset
420 do {
19bb5e64a57c split out coupling coefficient reconstruction into a separate function
jbr
parents: 5435
diff changeset
421 subbnd++;
19bb5e64a57c split out coupling coefficient reconstruction into a separate function
jbr
parents: 5435
diff changeset
422 for(j=0; j<12; j++) {
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
423 for(ch=1; ch<=s->fbw_channels; ch++) {
6123
8d88831a2777 fix phase flag processing for the case when coupling coordinates are reused
jbr
parents: 6117
diff changeset
424 if(s->channel_in_cpl[ch]) {
6430
de7502093922 Use 24-bit fixed-point transform coefficients until just before MDCT. This
jbr
parents: 6142
diff changeset
425 s->fixed_coeffs[ch][i] = ((int64_t)s->fixed_coeffs[CPL_CH][i] * (int64_t)s->cpl_coords[ch][bnd]) >> 23;
6123
8d88831a2777 fix phase flag processing for the case when coupling coordinates are reused
jbr
parents: 6117
diff changeset
426 if (ch == 2 && s->phase_flags[bnd])
6430
de7502093922 Use 24-bit fixed-point transform coefficients until just before MDCT. This
jbr
parents: 6142
diff changeset
427 s->fixed_coeffs[ch][i] = -s->fixed_coeffs[ch][i];
6123
8d88831a2777 fix phase flag processing for the case when coupling coordinates are reused
jbr
parents: 6117
diff changeset
428 }
5451
19bb5e64a57c split out coupling coefficient reconstruction into a separate function
jbr
parents: 5435
diff changeset
429 }
19bb5e64a57c split out coupling coefficient reconstruction into a separate function
jbr
parents: 5435
diff changeset
430 i++;
19bb5e64a57c split out coupling coefficient reconstruction into a separate function
jbr
parents: 5435
diff changeset
431 }
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
432 } while(s->cpl_band_struct[subbnd]);
5451
19bb5e64a57c split out coupling coefficient reconstruction into a separate function
jbr
parents: 5435
diff changeset
433 }
19bb5e64a57c split out coupling coefficient reconstruction into a separate function
jbr
parents: 5435
diff changeset
434 }
19bb5e64a57c split out coupling coefficient reconstruction into a separate function
jbr
parents: 5435
diff changeset
435
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
436 /**
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
437 * Grouped mantissas for 3-level 5-level and 11-level quantization
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
438 */
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
439 typedef struct {
6430
de7502093922 Use 24-bit fixed-point transform coefficients until just before MDCT. This
jbr
parents: 6142
diff changeset
440 int b1_mant[3];
de7502093922 Use 24-bit fixed-point transform coefficients until just before MDCT. This
jbr
parents: 6142
diff changeset
441 int b2_mant[3];
de7502093922 Use 24-bit fixed-point transform coefficients until just before MDCT. This
jbr
parents: 6142
diff changeset
442 int b4_mant[2];
5456
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
443 int b1ptr;
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
444 int b2ptr;
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
445 int b4ptr;
5306
abc5c130b448 AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents: 5305
diff changeset
446 } mant_groups;
abc5c130b448 AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents: 5305
diff changeset
447
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
448 /**
7719
0f7cdf663356 cosmetics: change another "get" to "decode"
jbr
parents: 7718
diff changeset
449 * Decode the transform coefficients for a particular channel
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
450 * reference: Section 7.3 Quantization and Decoding of Mantissas
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
451 */
7702
f91e273722c8 add more OKed parts of the E-AC-3 decoder: structural changes to support AHT mode mantissa decoding
jbr
parents: 7701
diff changeset
452 static void ac3_decode_transform_coeffs_ch(AC3DecodeContext *s, 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
453 {
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
454 GetBitContext *gbc = &s->gbc;
5454
5b497d971546 dither zero-bit mantissas by default. remove dithering only if it's explicitly turned off.
jbr
parents: 5453
diff changeset
455 int i, gcode, tbap, start, end;
5310
9aa9197034d7 AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents: 5309
diff changeset
456 uint8_t *exps;
9aa9197034d7 AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents: 5309
diff changeset
457 uint8_t *bap;
6430
de7502093922 Use 24-bit fixed-point transform coefficients until just before MDCT. This
jbr
parents: 6142
diff changeset
458 int *coeffs;
5309
0662a270aab7 AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents: 5308
diff changeset
459
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
460 exps = s->dexps[ch_index];
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
461 bap = s->bap[ch_index];
6430
de7502093922 Use 24-bit fixed-point transform coefficients until just before MDCT. This
jbr
parents: 6142
diff changeset
462 coeffs = s->fixed_coeffs[ch_index];
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
463 start = s->start_freq[ch_index];
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
464 end = s->end_freq[ch_index];
5303
b8821ff5c30d AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff changeset
465
5452
190d793a22e7 merge decoding of coupling channel coefficients and regular channel coefficients
jbr
parents: 5451
diff changeset
466 for (i = start; 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
467 tbap = bap[i];
0662a270aab7 AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents: 5308
diff changeset
468 switch (tbap) {
5304
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
469 case 0:
7601
69d5f318275f use LFG instead of Mersenne Twister for AC-3 PRNG
jbr
parents: 7594
diff changeset
470 coeffs[i] = (av_lfg_get(&s->dith_state) & 0x7FFFFF) - 0x400000;
5453
d3a265cd395c simplify coefficient decoding
jbr
parents: 5452
diff changeset
471 break;
5303
b8821ff5c30d AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff changeset
472
5304
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
473 case 1:
5456
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
474 if(m->b1ptr > 2) {
6089
12a77958941f cosmetics: rename GetBitContext gb to gbc
jbr
parents: 6088
diff changeset
475 gcode = get_bits(gbc, 5);
5456
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
476 m->b1_mant[0] = b1_mantissas[gcode][0];
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
477 m->b1_mant[1] = b1_mantissas[gcode][1];
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
478 m->b1_mant[2] = b1_mantissas[gcode][2];
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
479 m->b1ptr = 0;
5304
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
480 }
5456
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
481 coeffs[i] = m->b1_mant[m->b1ptr++];
5453
d3a265cd395c simplify coefficient decoding
jbr
parents: 5452
diff changeset
482 break;
5303
b8821ff5c30d AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff changeset
483
5304
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
484 case 2:
5456
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
485 if(m->b2ptr > 2) {
6089
12a77958941f cosmetics: rename GetBitContext gb to gbc
jbr
parents: 6088
diff changeset
486 gcode = get_bits(gbc, 7);
5456
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
487 m->b2_mant[0] = b2_mantissas[gcode][0];
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
488 m->b2_mant[1] = b2_mantissas[gcode][1];
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
489 m->b2_mant[2] = b2_mantissas[gcode][2];
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
490 m->b2ptr = 0;
5304
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
491 }
5456
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
492 coeffs[i] = m->b2_mant[m->b2ptr++];
5453
d3a265cd395c simplify coefficient decoding
jbr
parents: 5452
diff changeset
493 break;
5303
b8821ff5c30d AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff changeset
494
5304
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
495 case 3:
6089
12a77958941f cosmetics: rename GetBitContext gb to gbc
jbr
parents: 6088
diff changeset
496 coeffs[i] = b3_mantissas[get_bits(gbc, 3)];
5453
d3a265cd395c simplify coefficient decoding
jbr
parents: 5452
diff changeset
497 break;
5303
b8821ff5c30d AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff changeset
498
5304
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
499 case 4:
5456
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
500 if(m->b4ptr > 1) {
6089
12a77958941f cosmetics: rename GetBitContext gb to gbc
jbr
parents: 6088
diff changeset
501 gcode = get_bits(gbc, 7);
5456
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
502 m->b4_mant[0] = b4_mantissas[gcode][0];
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
503 m->b4_mant[1] = b4_mantissas[gcode][1];
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
504 m->b4ptr = 0;
5304
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
505 }
5456
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
506 coeffs[i] = m->b4_mant[m->b4ptr++];
5453
d3a265cd395c simplify coefficient decoding
jbr
parents: 5452
diff changeset
507 break;
5303
b8821ff5c30d AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff changeset
508
5304
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
509 case 5:
6089
12a77958941f cosmetics: rename GetBitContext gb to gbc
jbr
parents: 6088
diff changeset
510 coeffs[i] = b5_mantissas[get_bits(gbc, 4)];
5453
d3a265cd395c simplify coefficient decoding
jbr
parents: 5452
diff changeset
511 break;
5303
b8821ff5c30d AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff changeset
512
6430
de7502093922 Use 24-bit fixed-point transform coefficients until just before MDCT. This
jbr
parents: 6142
diff changeset
513 default: {
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
514 /* asymmetric dequantization */
6430
de7502093922 Use 24-bit fixed-point transform coefficients until just before MDCT. This
jbr
parents: 6142
diff changeset
515 int qlevel = quantization_tab[tbap];
de7502093922 Use 24-bit fixed-point transform coefficients until just before MDCT. This
jbr
parents: 6142
diff changeset
516 coeffs[i] = get_sbits(gbc, qlevel) << (24 - qlevel);
5453
d3a265cd395c simplify coefficient decoding
jbr
parents: 5452
diff changeset
517 break;
6430
de7502093922 Use 24-bit fixed-point transform coefficients until just before MDCT. This
jbr
parents: 6142
diff changeset
518 }
5304
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
519 }
6430
de7502093922 Use 24-bit fixed-point transform coefficients until just before MDCT. This
jbr
parents: 6142
diff changeset
520 coeffs[i] >>= exps[i];
5303
b8821ff5c30d AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff changeset
521 }
b8821ff5c30d AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff changeset
522 }
b8821ff5c30d AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff changeset
523
5454
5b497d971546 dither zero-bit mantissas by default. remove dithering only if it's explicitly turned off.
jbr
parents: 5453
diff changeset
524 /**
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
525 * Remove random dithering from coefficients with zero-bit mantissas
5454
5b497d971546 dither zero-bit mantissas by default. remove dithering only if it's explicitly turned off.
jbr
parents: 5453
diff changeset
526 * reference: Section 7.3.4 Dither for Zero Bit Mantissas (bap=0)
5b497d971546 dither zero-bit mantissas by default. remove dithering only if it's explicitly turned off.
jbr
parents: 5453
diff changeset
527 */
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
528 static void remove_dithering(AC3DecodeContext *s) {
5454
5b497d971546 dither zero-bit mantissas by default. remove dithering only if it's explicitly turned off.
jbr
parents: 5453
diff changeset
529 int ch, i;
5b497d971546 dither zero-bit mantissas by default. remove dithering only if it's explicitly turned off.
jbr
parents: 5453
diff changeset
530 int end=0;
6430
de7502093922 Use 24-bit fixed-point transform coefficients until just before MDCT. This
jbr
parents: 6142
diff changeset
531 int *coeffs;
5454
5b497d971546 dither zero-bit mantissas by default. remove dithering only if it's explicitly turned off.
jbr
parents: 5453
diff changeset
532 uint8_t *bap;
5b497d971546 dither zero-bit mantissas by default. remove dithering only if it's explicitly turned off.
jbr
parents: 5453
diff changeset
533
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
534 for(ch=1; ch<=s->fbw_channels; ch++) {
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
535 if(!s->dither_flag[ch]) {
6430
de7502093922 Use 24-bit fixed-point transform coefficients until just before MDCT. This
jbr
parents: 6142
diff changeset
536 coeffs = s->fixed_coeffs[ch];
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
537 bap = s->bap[ch];
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
538 if(s->channel_in_cpl[ch])
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
539 end = s->start_freq[CPL_CH];
5454
5b497d971546 dither zero-bit mantissas by default. remove dithering only if it's explicitly turned off.
jbr
parents: 5453
diff changeset
540 else
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
541 end = s->end_freq[ch];
5454
5b497d971546 dither zero-bit mantissas by default. remove dithering only if it's explicitly turned off.
jbr
parents: 5453
diff changeset
542 for(i=0; i<end; i++) {
6095
77626e4e0077 simplify
jbr
parents: 6094
diff changeset
543 if(!bap[i])
6430
de7502093922 Use 24-bit fixed-point transform coefficients until just before MDCT. This
jbr
parents: 6142
diff changeset
544 coeffs[i] = 0;
5454
5b497d971546 dither zero-bit mantissas by default. remove dithering only if it's explicitly turned off.
jbr
parents: 5453
diff changeset
545 }
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
546 if(s->channel_in_cpl[ch]) {
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
547 bap = s->bap[CPL_CH];
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
548 for(; i<s->end_freq[CPL_CH]; i++) {
6095
77626e4e0077 simplify
jbr
parents: 6094
diff changeset
549 if(!bap[i])
6430
de7502093922 Use 24-bit fixed-point transform coefficients until just before MDCT. This
jbr
parents: 6142
diff changeset
550 coeffs[i] = 0;
5454
5b497d971546 dither zero-bit mantissas by default. remove dithering only if it's explicitly turned off.
jbr
parents: 5453
diff changeset
551 }
5b497d971546 dither zero-bit mantissas by default. remove dithering only if it's explicitly turned off.
jbr
parents: 5453
diff changeset
552 }
5b497d971546 dither zero-bit mantissas by default. remove dithering only if it's explicitly turned off.
jbr
parents: 5453
diff changeset
553 }
5b497d971546 dither zero-bit mantissas by default. remove dithering only if it's explicitly turned off.
jbr
parents: 5453
diff changeset
554 }
5b497d971546 dither zero-bit mantissas by default. remove dithering only if it's explicitly turned off.
jbr
parents: 5453
diff changeset
555 }
5b497d971546 dither zero-bit mantissas by default. remove dithering only if it's explicitly turned off.
jbr
parents: 5453
diff changeset
556
7701
20b27ee9b40f cosmetics: rename some functions from *get_* to *decode_*
jbr
parents: 7667
diff changeset
557 static void decode_transform_coeffs_ch(AC3DecodeContext *s, int blk, int ch,
7626
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
558 mant_groups *m)
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
559 {
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
560 if (!s->channel_uses_aht[ch]) {
7701
20b27ee9b40f cosmetics: rename some functions from *get_* to *decode_*
jbr
parents: 7667
diff changeset
561 ac3_decode_transform_coeffs_ch(s, ch, m);
7626
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
562 } else {
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
563 /* if AHT is used, mantissas for all blocks are encoded in the first
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
564 block of the frame. */
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
565 int bin;
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
566 if (!blk)
7701
20b27ee9b40f cosmetics: rename some functions from *get_* to *decode_*
jbr
parents: 7667
diff changeset
567 ff_eac3_decode_transform_coeffs_aht_ch(s, ch);
7626
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
568 for (bin = s->start_freq[ch]; bin < s->end_freq[ch]; bin++) {
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
569 s->fixed_coeffs[ch][bin] = s->pre_mantissa[ch][bin][blk] >> s->dexps[ch][bin];
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
570 }
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
571 }
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
572 }
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
573
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
574 /**
7718
61e12905c9af cosmetics: change "get" to "decode"
jbr
parents: 7717
diff changeset
575 * Decode the transform coefficients.
5321
fcb2a52c88fe AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents: 5320
diff changeset
576 */
7702
f91e273722c8 add more OKed parts of the E-AC-3 decoder: structural changes to support AHT mode mantissa decoding
jbr
parents: 7701
diff changeset
577 static void decode_transform_coeffs(AC3DecodeContext *s, int blk)
5303
b8821ff5c30d AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff changeset
578 {
5476
e50f0d583a36 consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents: 5475
diff changeset
579 int ch, end;
5304
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
580 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
581 mant_groups m;
abc5c130b448 AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents: 5305
diff changeset
582
5456
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
583 m.b1ptr = m.b2ptr = m.b4ptr = 3;
5303
b8821ff5c30d AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff changeset
584
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
585 for (ch = 1; ch <= s->channels; ch++) {
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
586 /* transform coefficients for full-bandwidth channel */
7702
f91e273722c8 add more OKed parts of the E-AC-3 decoder: structural changes to support AHT mode mantissa decoding
jbr
parents: 7701
diff changeset
587 decode_transform_coeffs_ch(s, blk, ch, &m);
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
588 /* tranform coefficients for coupling channel come right after the
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
589 coefficients for the first coupled channel*/
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
590 if (s->channel_in_cpl[ch]) {
5306
abc5c130b448 AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents: 5305
diff changeset
591 if (!got_cplchan) {
7702
f91e273722c8 add more OKed parts of the E-AC-3 decoder: structural changes to support AHT mode mantissa decoding
jbr
parents: 7701
diff changeset
592 decode_transform_coeffs_ch(s, blk, CPL_CH, &m);
7491
0dbdc638270e cosmetics: use a better function name than uncouple_channels()
jbr
parents: 7490
diff changeset
593 calc_transform_coeffs_cpl(s);
5306
abc5c130b448 AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents: 5305
diff changeset
594 got_cplchan = 1;
abc5c130b448 AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents: 5305
diff changeset
595 }
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
596 end = s->end_freq[CPL_CH];
5461
c427d8950769 cosmetics: use braces when it makes the code easier to read.
jbr
parents: 5460
diff changeset
597 } else {
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
598 end = s->end_freq[ch];
5461
c427d8950769 cosmetics: use braces when it makes the code easier to read.
jbr
parents: 5460
diff changeset
599 }
5306
abc5c130b448 AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents: 5305
diff changeset
600 do
6906
86e3dce7f723 zero the upper frequencies of the correct coefficients
jbr
parents: 6889
diff changeset
601 s->fixed_coeffs[ch][end] = 0;
5306
abc5c130b448 AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents: 5305
diff changeset
602 while(++end < 256);
abc5c130b448 AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents: 5305
diff changeset
603 }
5303
b8821ff5c30d AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff changeset
604
7740
023851dde8c7 cosmetics: update comment about dithering
jbr
parents: 7719
diff changeset
605 /* zero the dithered coefficients for appropriate channels */
7717
a781fc312ccc cosmetics: indentation
jbr
parents: 7716
diff changeset
606 remove_dithering(s);
5303
b8821ff5c30d AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff changeset
607 }
b8821ff5c30d AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff changeset
608
5415
8bf7358978c8 simplify stereo rematrixing
jbr
parents: 5414
diff changeset
609 /**
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
610 * Stereo rematrixing.
5415
8bf7358978c8 simplify stereo rematrixing
jbr
parents: 5414
diff changeset
611 * reference: Section 7.5.4 Rematrixing : Decoding Technique
8bf7358978c8 simplify stereo rematrixing
jbr
parents: 5414
diff changeset
612 */
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
613 static void do_rematrixing(AC3DecodeContext *s)
5304
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
614 {
5415
8bf7358978c8 simplify stereo rematrixing
jbr
parents: 5414
diff changeset
615 int bnd, i;
5310
9aa9197034d7 AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents: 5309
diff changeset
616 int end, bndend;
6430
de7502093922 Use 24-bit fixed-point transform coefficients until just before MDCT. This
jbr
parents: 6142
diff changeset
617 int tmp0, tmp1;
5304
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
618
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
619 end = FFMIN(s->end_freq[1], s->end_freq[2]);
5310
9aa9197034d7 AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents: 5309
diff changeset
620
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
621 for(bnd=0; bnd<s->num_rematrixing_bands; bnd++) {
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
622 if(s->rematrixing_flags[bnd]) {
7033
f90b89217cc9 move rematrixing band table to ac3dec_data.c
jbr
parents: 7028
diff changeset
623 bndend = FFMIN(end, ff_ac3_rematrix_band_tab[bnd+1]);
f90b89217cc9 move rematrixing band table to ac3dec_data.c
jbr
parents: 7028
diff changeset
624 for(i=ff_ac3_rematrix_band_tab[bnd]; i<bndend; i++) {
6430
de7502093922 Use 24-bit fixed-point transform coefficients until just before MDCT. This
jbr
parents: 6142
diff changeset
625 tmp0 = s->fixed_coeffs[1][i];
de7502093922 Use 24-bit fixed-point transform coefficients until just before MDCT. This
jbr
parents: 6142
diff changeset
626 tmp1 = s->fixed_coeffs[2][i];
de7502093922 Use 24-bit fixed-point transform coefficients until just before MDCT. This
jbr
parents: 6142
diff changeset
627 s->fixed_coeffs[1][i] = tmp0 + tmp1;
de7502093922 Use 24-bit fixed-point transform coefficients until just before MDCT. This
jbr
parents: 6142
diff changeset
628 s->fixed_coeffs[2][i] = tmp0 - tmp1;
5415
8bf7358978c8 simplify stereo rematrixing
jbr
parents: 5414
diff changeset
629 }
8bf7358978c8 simplify stereo rematrixing
jbr
parents: 5414
diff changeset
630 }
5304
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
631 }
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
632 }
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
633
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
634 /**
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
635 * Inverse MDCT Transform.
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
636 * Convert frequency domain coefficients to time-domain audio samples.
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
637 * reference: Section 7.9.4 Transformation Equations
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
638 */
6480
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
639 static inline void do_imdct(AC3DecodeContext *s, int channels)
5306
abc5c130b448 AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents: 5305
diff changeset
640 {
5336
cc3f5a28aa2a fix the 256-point MDCT
jbr
parents: 5335
diff changeset
641 int ch;
7561
be6d31643128 oops, non-normalized downmix to mono contaminated add_bias for non-simd float-to-int.
lorenm
parents: 7554
diff changeset
642 float add_bias = s->add_bias;
be6d31643128 oops, non-normalized downmix to mono contaminated add_bias for non-simd float-to-int.
lorenm
parents: 7554
diff changeset
643 if(s->out_channels==1 && channels>1)
be6d31643128 oops, non-normalized downmix to mono contaminated add_bias for non-simd float-to-int.
lorenm
parents: 7554
diff changeset
644 add_bias *= LEVEL_MINUS_3DB; // compensate for the gain in downmix
5476
e50f0d583a36 consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents: 5475
diff changeset
645
6006
ed7a232d570a cosmetics: rename ac3 decoder variables
jbr
parents: 6005
diff changeset
646 for (ch=1; ch<=channels; ch++) {
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
647 if (s->block_switch[ch]) {
7549
60b5c1e5a7ee use imdct_half in ac3
lorenm
parents: 7547
diff changeset
648 int i;
60b5c1e5a7ee use imdct_half in ac3
lorenm
parents: 7547
diff changeset
649 float *x = s->tmp_output+128;
60b5c1e5a7ee use imdct_half in ac3
lorenm
parents: 7547
diff changeset
650 for(i=0; i<128; i++)
60b5c1e5a7ee use imdct_half in ac3
lorenm
parents: 7547
diff changeset
651 x[i] = s->transform_coeffs[ch][2*i];
60b5c1e5a7ee use imdct_half in ac3
lorenm
parents: 7547
diff changeset
652 ff_imdct_half(&s->imdct_256, s->tmp_output, x);
7561
be6d31643128 oops, non-normalized downmix to mono contaminated add_bias for non-simd float-to-int.
lorenm
parents: 7554
diff changeset
653 s->dsp.vector_fmul_window(s->output[ch-1], s->delay[ch-1], s->tmp_output, s->window, add_bias, 128);
7549
60b5c1e5a7ee use imdct_half in ac3
lorenm
parents: 7547
diff changeset
654 for(i=0; i<128; i++)
60b5c1e5a7ee use imdct_half in ac3
lorenm
parents: 7547
diff changeset
655 x[i] = s->transform_coeffs[ch][2*i+1];
60b5c1e5a7ee use imdct_half in ac3
lorenm
parents: 7547
diff changeset
656 ff_imdct_half(&s->imdct_256, s->delay[ch-1], x);
5461
c427d8950769 cosmetics: use braces when it makes the code easier to read.
jbr
parents: 5460
diff changeset
657 } else {
7549
60b5c1e5a7ee use imdct_half in ac3
lorenm
parents: 7547
diff changeset
658 ff_imdct_half(&s->imdct_512, s->tmp_output, s->transform_coeffs[ch]);
7561
be6d31643128 oops, non-normalized downmix to mono contaminated add_bias for non-simd float-to-int.
lorenm
parents: 7554
diff changeset
659 s->dsp.vector_fmul_window(s->output[ch-1], s->delay[ch-1], s->tmp_output, s->window, add_bias, 128);
7549
60b5c1e5a7ee use imdct_half in ac3
lorenm
parents: 7547
diff changeset
660 memcpy(s->delay[ch-1], s->tmp_output+128, 128*sizeof(float));
5461
c427d8950769 cosmetics: use braces when it makes the code easier to read.
jbr
parents: 5460
diff changeset
661 }
5306
abc5c130b448 AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents: 5305
diff changeset
662 }
abc5c130b448 AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents: 5305
diff changeset
663 }
abc5c130b448 AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents: 5305
diff changeset
664
5480
930bca6dd95f add support for downmixing to stereo or mono
jbr
parents: 5479
diff changeset
665 /**
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
666 * Downmix the output to mono or stereo.
5480
930bca6dd95f add support for downmixing to stereo or mono
jbr
parents: 5479
diff changeset
667 */
7563
8390efaa0c03 simd downmix
lorenm
parents: 7562
diff changeset
668 void ff_ac3_downmix_c(float (*samples)[256], float (*matrix)[2], int out_ch, int in_ch, int len)
5480
930bca6dd95f add support for downmixing to stereo or mono
jbr
parents: 5479
diff changeset
669 {
930bca6dd95f add support for downmixing to stereo or mono
jbr
parents: 5479
diff changeset
670 int i, j;
6431
305c49259b59 pre-calculate downmix coefficient sums. 2% faster 5.1-to-stereo downmixing.
jbr
parents: 6430
diff changeset
671 float v0, v1;
7563
8390efaa0c03 simd downmix
lorenm
parents: 7562
diff changeset
672 if(out_ch == 2) {
8390efaa0c03 simd downmix
lorenm
parents: 7562
diff changeset
673 for(i=0; i<len; i++) {
7554
96d57e3b78e5 optimize ac3_downmix.
lorenm
parents: 7550
diff changeset
674 v0 = v1 = 0.0f;
7563
8390efaa0c03 simd downmix
lorenm
parents: 7562
diff changeset
675 for(j=0; j<in_ch; j++) {
8390efaa0c03 simd downmix
lorenm
parents: 7562
diff changeset
676 v0 += samples[j][i] * matrix[j][0];
8390efaa0c03 simd downmix
lorenm
parents: 7562
diff changeset
677 v1 += samples[j][i] * matrix[j][1];
7554
96d57e3b78e5 optimize ac3_downmix.
lorenm
parents: 7550
diff changeset
678 }
96d57e3b78e5 optimize ac3_downmix.
lorenm
parents: 7550
diff changeset
679 samples[0][i] = v0;
96d57e3b78e5 optimize ac3_downmix.
lorenm
parents: 7550
diff changeset
680 samples[1][i] = v1;
5480
930bca6dd95f add support for downmixing to stereo or mono
jbr
parents: 5479
diff changeset
681 }
7563
8390efaa0c03 simd downmix
lorenm
parents: 7562
diff changeset
682 } else if(out_ch == 1) {
8390efaa0c03 simd downmix
lorenm
parents: 7562
diff changeset
683 for(i=0; i<len; i++) {
7554
96d57e3b78e5 optimize ac3_downmix.
lorenm
parents: 7550
diff changeset
684 v0 = 0.0f;
7563
8390efaa0c03 simd downmix
lorenm
parents: 7562
diff changeset
685 for(j=0; j<in_ch; j++)
8390efaa0c03 simd downmix
lorenm
parents: 7562
diff changeset
686 v0 += samples[j][i] * matrix[j][0];
7554
96d57e3b78e5 optimize ac3_downmix.
lorenm
parents: 7550
diff changeset
687 samples[0][i] = v0;
5480
930bca6dd95f add support for downmixing to stereo or mono
jbr
parents: 5479
diff changeset
688 }
930bca6dd95f add support for downmixing to stereo or mono
jbr
parents: 5479
diff changeset
689 }
930bca6dd95f add support for downmixing to stereo or mono
jbr
parents: 5479
diff changeset
690 }
930bca6dd95f add support for downmixing to stereo or mono
jbr
parents: 5479
diff changeset
691
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
692 /**
6480
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
693 * Upmix delay samples from stereo to original channel layout.
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
694 */
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
695 static void ac3_upmix_delay(AC3DecodeContext *s)
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
696 {
7625
da9353cd6d71 get data size based on the actual data array instead of coding-in the calculation
jbr
parents: 7624
diff changeset
697 int channel_data_size = sizeof(s->delay[0]);
6480
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
698 switch(s->channel_mode) {
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
699 case AC3_CHMODE_DUALMONO:
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
700 case AC3_CHMODE_STEREO:
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
701 /* upmix mono to stereo */
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
702 memcpy(s->delay[1], s->delay[0], channel_data_size);
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
703 break;
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
704 case AC3_CHMODE_2F2R:
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
705 memset(s->delay[3], 0, channel_data_size);
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
706 case AC3_CHMODE_2F1R:
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
707 memset(s->delay[2], 0, channel_data_size);
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
708 break;
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
709 case AC3_CHMODE_3F2R:
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
710 memset(s->delay[4], 0, channel_data_size);
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
711 case AC3_CHMODE_3F1R:
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
712 memset(s->delay[3], 0, channel_data_size);
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
713 case AC3_CHMODE_3F:
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
714 memcpy(s->delay[2], s->delay[1], channel_data_size);
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
715 memset(s->delay[1], 0, channel_data_size);
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
716 break;
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
717 }
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
718 }
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
719
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
720 /**
8135
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
721 * Decode band structure for coupling, spectral extension, or enhanced coupling.
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
722 * @param[in] gbc bit reader context
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
723 * @param[in] blk block number
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
724 * @param[in] eac3 flag to indicate E-AC-3
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
725 * @param[in] ecpl flag to indicate enhanced coupling
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
726 * @param[in] start_subband subband number for start of range
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
727 * @param[in] end_subband subband number for end of range
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
728 * @param[in] default_band_struct default band structure table
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
729 * @param[out] band_struct decoded band structure
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
730 * @param[out] num_subbands number of subbands (optionally NULL)
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
731 * @param[out] num_bands number of bands (optionally NULL)
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
732 * @param[out] band_sizes array containing the number of bins in each band (optionally NULL)
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
733 */
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
734 static void decode_band_structure(GetBitContext *gbc, int blk, int eac3,
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
735 int ecpl, int start_subband, int end_subband,
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
736 const uint8_t *default_band_struct,
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
737 uint8_t *band_struct, int *num_subbands,
8254
be0f5221ccd0 ac3dec: use uint8_t for band sizes
jbr
parents: 8249
diff changeset
738 int *num_bands, uint8_t *band_sizes)
8135
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
739 {
8255
1c4ec499557e silence gcc warning: ¡Æn_bands¡Ç may be used uninitialized
jbr
parents: 8254
diff changeset
740 int subbnd, bnd, n_subbands, n_bands=0;
8254
be0f5221ccd0 ac3dec: use uint8_t for band sizes
jbr
parents: 8249
diff changeset
741 uint8_t bnd_sz[22];
8135
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
742
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
743 n_subbands = end_subband - start_subband;
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
744
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
745 /* decode band structure from bitstream or use default */
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
746 if (!eac3 || get_bits1(gbc)) {
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
747 for (subbnd = 0; subbnd < n_subbands - 1; subbnd++) {
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
748 band_struct[subbnd] = get_bits1(gbc);
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
749 }
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
750 } else if (!blk) {
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
751 memcpy(band_struct,
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
752 &default_band_struct[start_subband+1],
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
753 n_subbands-1);
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
754 }
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
755 band_struct[n_subbands-1] = 0;
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
756
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
757 /* calculate number of bands and band sizes based on band structure.
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
758 note that the first 4 subbands in enhanced coupling span only 6 bins
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
759 instead of 12. */
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
760 if (num_bands || band_sizes ) {
8142
f17b1eb9ccd1 revert r15812 (E-AC-3 Spectral Extension) pending further review
jbr
parents: 8139
diff changeset
761 n_bands = n_subbands;
8135
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
762 bnd_sz[0] = ecpl ? 6 : 12;
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
763 for (bnd = 0, subbnd = 1; subbnd < n_subbands; subbnd++) {
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
764 int subbnd_size = (ecpl && subbnd < 4) ? 6 : 12;
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
765 if (band_struct[subbnd-1]) {
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
766 n_bands--;
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
767 bnd_sz[bnd] += subbnd_size;
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
768 } else {
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
769 bnd_sz[++bnd] = subbnd_size;
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
770 }
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
771 }
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
772 }
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
773
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
774 /* set optional output params */
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
775 if (num_subbands)
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
776 *num_subbands = n_subbands;
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
777 if (num_bands)
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
778 *num_bands = n_bands;
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
779 if (band_sizes)
8254
be0f5221ccd0 ac3dec: use uint8_t for band sizes
jbr
parents: 8249
diff changeset
780 memcpy(band_sizes, bnd_sz, n_bands);
8135
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
781 }
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
782
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
783 /**
7490
bddd15a1d167 cosmetics: change function name and comments to refer to block decoding
jbr
parents: 7489
diff changeset
784 * Decode a single audio block from the AC-3 bitstream.
5321
fcb2a52c88fe AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents: 5320
diff changeset
785 */
7490
bddd15a1d167 cosmetics: change function name and comments to refer to block decoding
jbr
parents: 7489
diff changeset
786 static int decode_audio_block(AC3DecodeContext *s, int blk)
5304
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
787 {
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
788 int fbw_channels = s->fbw_channels;
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
789 int channel_mode = s->channel_mode;
5471
37c1944ca4ee make exponent decoding consistent (prepare for merging coupling and lfe code with normal channel code).
jbr
parents: 5461
diff changeset
790 int i, bnd, seg, ch;
6480
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
791 int different_transforms;
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
792 int downmix_output;
7026
4bd2ccb0619e store cpl_in_use for all blocks in decode context
jbr
parents: 7020
diff changeset
793 int cpl_in_use;
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
794 GetBitContext *gbc = &s->gbc;
5476
e50f0d583a36 consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents: 5475
diff changeset
795 uint8_t bit_alloc_stages[AC3_MAX_CHANNELS];
5304
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
796
5476
e50f0d583a36 consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents: 5475
diff changeset
797 memset(bit_alloc_stages, 0, AC3_MAX_CHANNELS);
e50f0d583a36 consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents: 5475
diff changeset
798
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
799 /* block switch flags */
6480
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
800 different_transforms = 0;
7626
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
801 if (s->block_switch_syntax) {
7627
93c5703328d6 cosmetics: indentation
jbr
parents: 7626
diff changeset
802 for (ch = 1; ch <= fbw_channels; ch++) {
93c5703328d6 cosmetics: indentation
jbr
parents: 7626
diff changeset
803 s->block_switch[ch] = get_bits1(gbc);
93c5703328d6 cosmetics: indentation
jbr
parents: 7626
diff changeset
804 if(ch > 1 && s->block_switch[ch] != s->block_switch[1])
93c5703328d6 cosmetics: indentation
jbr
parents: 7626
diff changeset
805 different_transforms = 1;
93c5703328d6 cosmetics: indentation
jbr
parents: 7626
diff changeset
806 }
7626
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
807 }
5309
0662a270aab7 AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents: 5308
diff changeset
808
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
809 /* dithering flags */
7626
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
810 if (s->dither_flag_syntax) {
7627
93c5703328d6 cosmetics: indentation
jbr
parents: 7626
diff changeset
811 for (ch = 1; ch <= fbw_channels; ch++) {
93c5703328d6 cosmetics: indentation
jbr
parents: 7626
diff changeset
812 s->dither_flag[ch] = get_bits1(gbc);
93c5703328d6 cosmetics: indentation
jbr
parents: 7626
diff changeset
813 }
7626
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
814 }
5309
0662a270aab7 AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents: 5308
diff changeset
815
5497
377e9152aa9b use array for dynamic range scaling factors
jbr
parents: 5495
diff changeset
816 /* dynamic range */
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
817 i = !(s->channel_mode);
5497
377e9152aa9b use array for dynamic range scaling factors
jbr
parents: 5495
diff changeset
818 do {
6089
12a77958941f cosmetics: rename GetBitContext gb to gbc
jbr
parents: 6088
diff changeset
819 if(get_bits1(gbc)) {
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
820 s->dynamic_range[i] = ((dynamic_range_tab[get_bits(gbc, 8)]-1.0) *
6091
c365f7b83133 cosmetics: vertical realignment after last commit
jbr
parents: 6090
diff changeset
821 s->avctx->drc_scale)+1.0;
5386
d6347c3cb329 Use shared AC-3 header parsing. Move some initializations to block parsing function.
jbr
parents: 5385
diff changeset
822 } else if(blk == 0) {
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
823 s->dynamic_range[i] = 1.0f;
5386
d6347c3cb329 Use shared AC-3 header parsing. Move some initializations to block parsing function.
jbr
parents: 5385
diff changeset
824 }
5497
377e9152aa9b use array for dynamic range scaling factors
jbr
parents: 5495
diff changeset
825 } while(i--);
5309
0662a270aab7 AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents: 5308
diff changeset
826
7664
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
827 /* spectral extension strategy */
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
828 if (s->eac3 && (!blk || get_bits1(gbc))) {
8142
f17b1eb9ccd1 revert r15812 (E-AC-3 Spectral Extension) pending further review
jbr
parents: 8139
diff changeset
829 if (get_bits1(gbc)) {
8281
f93efc084e41 Make av_log_missing_feature an internal function, and change its name
stefano
parents: 8280
diff changeset
830 ff_log_missing_feature(s->avctx, "Spectral extension", 1);
8142
f17b1eb9ccd1 revert r15812 (E-AC-3 Spectral Extension) pending further review
jbr
parents: 8139
diff changeset
831 return -1;
7664
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
832 }
8142
f17b1eb9ccd1 revert r15812 (E-AC-3 Spectral Extension) pending further review
jbr
parents: 8139
diff changeset
833 /* TODO: parse spectral extension strategy info */
7664
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
834 }
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
835
8142
f17b1eb9ccd1 revert r15812 (E-AC-3 Spectral Extension) pending further review
jbr
parents: 8139
diff changeset
836 /* TODO: spectral extension coordinates */
7664
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
837
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
838 /* coupling strategy */
7746
abb4c660f9df commit more OKed parts of the E-AC-3 decoder
jbr
parents: 7740
diff changeset
839 if (s->eac3 ? s->cpl_strategy_exists[blk] : get_bits1(gbc)) {
5476
e50f0d583a36 consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents: 5475
diff changeset
840 memset(bit_alloc_stages, 3, AC3_MAX_CHANNELS);
7664
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
841 if (!s->eac3)
7665
762007251900 cosmetics: indentation
jbr
parents: 7664
diff changeset
842 s->cpl_in_use[blk] = get_bits1(gbc);
7328
9309e19c2b98 read 'coupling in use' parameter from bitstream into decoder context first,
jbr
parents: 7311
diff changeset
843 if (s->cpl_in_use[blk]) {
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
844 /* coupling in use */
8132
4cd689b64c36 cosmetics: rename two variables
jbr
parents: 7831
diff changeset
845 int cpl_start_subband, cpl_end_subband;
5414
9746c9a0384f change 2 fields from context to local variables
jbr
parents: 5413
diff changeset
846
6868
5387096bf92a add check for invalid channel mode when coupling is used
jbr
parents: 6763
diff changeset
847 if (channel_mode < AC3_CHMODE_STEREO) {
5387096bf92a add check for invalid channel mode when coupling is used
jbr
parents: 6763
diff changeset
848 av_log(s->avctx, AV_LOG_ERROR, "coupling not allowed in mono or dual-mono\n");
5387096bf92a add check for invalid channel mode when coupling is used
jbr
parents: 6763
diff changeset
849 return -1;
5387096bf92a add check for invalid channel mode when coupling is used
jbr
parents: 6763
diff changeset
850 }
5387096bf92a add check for invalid channel mode when coupling is used
jbr
parents: 6763
diff changeset
851
7664
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
852 /* check for enhanced coupling */
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
853 if (s->eac3 && get_bits1(gbc)) {
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
854 /* TODO: parse enhanced coupling strategy info */
8281
f93efc084e41 Make av_log_missing_feature an internal function, and change its name
stefano
parents: 8280
diff changeset
855 ff_log_missing_feature(s->avctx, "Enhanced coupling", 1);
7664
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
856 return -1;
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
857 }
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
858
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
859 /* determine which channels are coupled */
7664
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
860 if (s->eac3 && s->channel_mode == AC3_CHMODE_STEREO) {
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
861 s->channel_in_cpl[1] = 1;
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
862 s->channel_in_cpl[2] = 1;
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
863 } else {
7665
762007251900 cosmetics: indentation
jbr
parents: 7664
diff changeset
864 for (ch = 1; ch <= fbw_channels; ch++)
762007251900 cosmetics: indentation
jbr
parents: 7664
diff changeset
865 s->channel_in_cpl[ch] = get_bits1(gbc);
7664
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
866 }
5309
0662a270aab7 AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents: 5308
diff changeset
867
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
868 /* phase flags in use */
6005
7d9dddd54817 cosmetics: rename common ac3 variables
jbr
parents: 6003
diff changeset
869 if (channel_mode == AC3_CHMODE_STEREO)
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
870 s->phase_flags_in_use = get_bits1(gbc);
5309
0662a270aab7 AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents: 5308
diff changeset
871
7664
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
872 /* coupling frequency range */
8142
f17b1eb9ccd1 revert r15812 (E-AC-3 Spectral Extension) pending further review
jbr
parents: 8139
diff changeset
873 /* TODO: modify coupling end freq if spectral extension is used */
8132
4cd689b64c36 cosmetics: rename two variables
jbr
parents: 7831
diff changeset
874 cpl_start_subband = get_bits(gbc, 4);
8142
f17b1eb9ccd1 revert r15812 (E-AC-3 Spectral Extension) pending further review
jbr
parents: 8139
diff changeset
875 cpl_end_subband = get_bits(gbc, 4) + 3;
8133
043e1096c83d simplify decoding of coupling frequency range
jbr
parents: 8132
diff changeset
876 s->num_cpl_subbands = cpl_end_subband - cpl_start_subband;
043e1096c83d simplify decoding of coupling frequency range
jbr
parents: 8132
diff changeset
877 if (s->num_cpl_subbands < 0) {
043e1096c83d simplify decoding of coupling frequency range
jbr
parents: 8132
diff changeset
878 av_log(s->avctx, AV_LOG_ERROR, "invalid coupling range (%d > %d)\n",
043e1096c83d simplify decoding of coupling frequency range
jbr
parents: 8132
diff changeset
879 cpl_start_subband, cpl_end_subband);
5309
0662a270aab7 AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents: 5308
diff changeset
880 return -1;
0662a270aab7 AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents: 5308
diff changeset
881 }
8132
4cd689b64c36 cosmetics: rename two variables
jbr
parents: 7831
diff changeset
882 s->start_freq[CPL_CH] = cpl_start_subband * 12 + 37;
8133
043e1096c83d simplify decoding of coupling frequency range
jbr
parents: 8132
diff changeset
883 s->end_freq[CPL_CH] = cpl_end_subband * 12 + 37;
7664
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
884
8135
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
885 decode_band_structure(gbc, blk, s->eac3, 0,
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
886 cpl_start_subband, cpl_end_subband,
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
887 ff_eac3_default_cpl_band_struct,
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
888 s->cpl_band_struct, &s->num_cpl_subbands,
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
889 &s->num_cpl_bands, NULL);
5388
1bdaa3c03526 change some bit masks to arrays
jbr
parents: 5387
diff changeset
890 } else {
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
891 /* coupling not in use */
7664
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
892 for (ch = 1; ch <= fbw_channels; ch++) {
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
893 s->channel_in_cpl[ch] = 0;
7664
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
894 s->first_cpl_coords[ch] = 1;
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
895 }
7667
ce3402b964cd fix decoding of coupling leak info for normal AC-3
jbr
parents: 7665
diff changeset
896 s->first_cpl_leak = s->eac3;
7664
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
897 s->phase_flags_in_use = 0;
5304
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
898 }
7664
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
899 } else if (!s->eac3) {
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
900 if(!blk) {
7665
762007251900 cosmetics: indentation
jbr
parents: 7664
diff changeset
901 av_log(s->avctx, AV_LOG_ERROR, "new coupling strategy must be present in block 0\n");
762007251900 cosmetics: indentation
jbr
parents: 7664
diff changeset
902 return -1;
762007251900 cosmetics: indentation
jbr
parents: 7664
diff changeset
903 } else {
762007251900 cosmetics: indentation
jbr
parents: 7664
diff changeset
904 s->cpl_in_use[blk] = s->cpl_in_use[blk-1];
762007251900 cosmetics: indentation
jbr
parents: 7664
diff changeset
905 }
7664
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
906 }
7328
9309e19c2b98 read 'coupling in use' parameter from bitstream into decoder context first,
jbr
parents: 7311
diff changeset
907 cpl_in_use = s->cpl_in_use[blk];
5309
0662a270aab7 AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents: 5308
diff changeset
908
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
909 /* coupling coordinates */
7026
4bd2ccb0619e store cpl_in_use for all blocks in decode context
jbr
parents: 7020
diff changeset
910 if (cpl_in_use) {
6006
ed7a232d570a cosmetics: rename ac3 decoder variables
jbr
parents: 6005
diff changeset
911 int cpl_coords_exist = 0;
5309
0662a270aab7 AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents: 5308
diff changeset
912
6006
ed7a232d570a cosmetics: rename ac3 decoder variables
jbr
parents: 6005
diff changeset
913 for (ch = 1; ch <= fbw_channels; ch++) {
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
914 if (s->channel_in_cpl[ch]) {
7746
abb4c660f9df commit more OKed parts of the E-AC-3 decoder
jbr
parents: 7740
diff changeset
915 if ((s->eac3 && s->first_cpl_coords[ch]) || get_bits1(gbc)) {
6006
ed7a232d570a cosmetics: rename ac3 decoder variables
jbr
parents: 6005
diff changeset
916 int master_cpl_coord, cpl_coord_exp, cpl_coord_mant;
7746
abb4c660f9df commit more OKed parts of the E-AC-3 decoder
jbr
parents: 7740
diff changeset
917 s->first_cpl_coords[ch] = 0;
6006
ed7a232d570a cosmetics: rename ac3 decoder variables
jbr
parents: 6005
diff changeset
918 cpl_coords_exist = 1;
6089
12a77958941f cosmetics: rename GetBitContext gb to gbc
jbr
parents: 6088
diff changeset
919 master_cpl_coord = 3 * get_bits(gbc, 2);
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
920 for (bnd = 0; bnd < s->num_cpl_bands; bnd++) {
6089
12a77958941f cosmetics: rename GetBitContext gb to gbc
jbr
parents: 6088
diff changeset
921 cpl_coord_exp = get_bits(gbc, 4);
12a77958941f cosmetics: rename GetBitContext gb to gbc
jbr
parents: 6088
diff changeset
922 cpl_coord_mant = get_bits(gbc, 4);
6006
ed7a232d570a cosmetics: rename ac3 decoder variables
jbr
parents: 6005
diff changeset
923 if (cpl_coord_exp == 15)
6430
de7502093922 Use 24-bit fixed-point transform coefficients until just before MDCT. This
jbr
parents: 6142
diff changeset
924 s->cpl_coords[ch][bnd] = cpl_coord_mant << 22;
5306
abc5c130b448 AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents: 5305
diff changeset
925 else
6430
de7502093922 Use 24-bit fixed-point transform coefficients until just before MDCT. This
jbr
parents: 6142
diff changeset
926 s->cpl_coords[ch][bnd] = (cpl_coord_mant + 16) << 21;
de7502093922 Use 24-bit fixed-point transform coefficients until just before MDCT. This
jbr
parents: 6142
diff changeset
927 s->cpl_coords[ch][bnd] >>= (cpl_coord_exp + master_cpl_coord);
5304
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
928 }
6869
59ae0494b656 add checks for missing information in the first block
jbr
parents: 6868
diff changeset
929 } else if (!blk) {
59ae0494b656 add checks for missing information in the first block
jbr
parents: 6868
diff changeset
930 av_log(s->avctx, AV_LOG_ERROR, "new coupling coordinates must be present in block 0\n");
59ae0494b656 add checks for missing information in the first block
jbr
parents: 6868
diff changeset
931 return -1;
5304
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
932 }
7746
abb4c660f9df commit more OKed parts of the E-AC-3 decoder
jbr
parents: 7740
diff changeset
933 } else {
abb4c660f9df commit more OKed parts of the E-AC-3 decoder
jbr
parents: 7740
diff changeset
934 /* channel not in coupling */
abb4c660f9df commit more OKed parts of the E-AC-3 decoder
jbr
parents: 7740
diff changeset
935 s->first_cpl_coords[ch] = 1;
5461
c427d8950769 cosmetics: use braces when it makes the code easier to read.
jbr
parents: 5460
diff changeset
936 }
c427d8950769 cosmetics: use braces when it makes the code easier to read.
jbr
parents: 5460
diff changeset
937 }
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
938 /* phase flags */
6123
8d88831a2777 fix phase flag processing for the case when coupling coordinates are reused
jbr
parents: 6117
diff changeset
939 if (channel_mode == AC3_CHMODE_STEREO && cpl_coords_exist) {
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
940 for (bnd = 0; bnd < s->num_cpl_bands; bnd++) {
6123
8d88831a2777 fix phase flag processing for the case when coupling coordinates are reused
jbr
parents: 6117
diff changeset
941 s->phase_flags[bnd] = s->phase_flags_in_use? get_bits1(gbc) : 0;
5461
c427d8950769 cosmetics: use braces when it makes the code easier to read.
jbr
parents: 5460
diff changeset
942 }
c427d8950769 cosmetics: use braces when it makes the code easier to read.
jbr
parents: 5460
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 }
0662a270aab7 AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents: 5308
diff changeset
945
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
946 /* stereo rematrixing strategy and band structure */
6005
7d9dddd54817 cosmetics: rename common ac3 variables
jbr
parents: 6003
diff changeset
947 if (channel_mode == AC3_CHMODE_STEREO) {
7664
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
948 if ((s->eac3 && !blk) || get_bits1(gbc)) {
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
949 s->num_rematrixing_bands = 4;
8142
f17b1eb9ccd1 revert r15812 (E-AC-3 Spectral Extension) pending further review
jbr
parents: 8139
diff changeset
950 if(cpl_in_use && s->start_freq[CPL_CH] <= 61)
f17b1eb9ccd1 revert r15812 (E-AC-3 Spectral Extension) pending further review
jbr
parents: 8139
diff changeset
951 s->num_rematrixing_bands -= 1 + (s->start_freq[CPL_CH] == 37);
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
952 for(bnd=0; bnd<s->num_rematrixing_bands; bnd++)
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
953 s->rematrixing_flags[bnd] = get_bits1(gbc);
6869
59ae0494b656 add checks for missing information in the first block
jbr
parents: 6868
diff changeset
954 } else if (!blk) {
59ae0494b656 add checks for missing information in the first block
jbr
parents: 6868
diff changeset
955 av_log(s->avctx, AV_LOG_ERROR, "new rematrixing strategy must be present in block 0\n");
59ae0494b656 add checks for missing information in the first block
jbr
parents: 6868
diff changeset
956 return -1;
5305
5892b4a6380b AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents: 5304
diff changeset
957 }
5303
b8821ff5c30d AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff changeset
958 }
5309
0662a270aab7 AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents: 5308
diff changeset
959
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
960 /* exponent strategies for each channel */
7026
4bd2ccb0619e store cpl_in_use for all blocks in decode context
jbr
parents: 7020
diff changeset
961 for (ch = !cpl_in_use; ch <= s->channels; ch++) {
7709
0b11b0e7b404 do not read exponent strategies from each block for E-AC-3 since they are in the header
jbr
parents: 7703
diff changeset
962 if (!s->eac3)
7710
571c3c9bc025 cosmetics: indent after last commit
jbr
parents: 7709
diff changeset
963 s->exp_strategy[blk][ch] = get_bits(gbc, 2 - (ch == s->lfe_ch));
7027
1edec36c02c5 store exp_strategy for all blocks in decode context
jbr
parents: 7026
diff changeset
964 if(s->exp_strategy[blk][ch] != EXP_REUSE)
5476
e50f0d583a36 consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents: 5475
diff changeset
965 bit_alloc_stages[ch] = 3;
e50f0d583a36 consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents: 5475
diff changeset
966 }
5309
0662a270aab7 AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents: 5308
diff changeset
967
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
968 /* channel bandwidth */
6006
ed7a232d570a cosmetics: rename ac3 decoder variables
jbr
parents: 6005
diff changeset
969 for (ch = 1; ch <= fbw_channels; ch++) {
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
970 s->start_freq[ch] = 0;
7027
1edec36c02c5 store exp_strategy for all blocks in decode context
jbr
parents: 7026
diff changeset
971 if (s->exp_strategy[blk][ch] != EXP_REUSE) {
6957
6eb895971766 only calculate number of exponent groups when exponents are not reused.
jbr
parents: 6956
diff changeset
972 int group_size;
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
973 int prev = s->end_freq[ch];
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
974 if (s->channel_in_cpl[ch])
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
975 s->end_freq[ch] = s->start_freq[CPL_CH];
5305
5892b4a6380b AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents: 5304
diff changeset
976 else {
6089
12a77958941f cosmetics: rename GetBitContext gb to gbc
jbr
parents: 6088
diff changeset
977 int bandwidth_code = get_bits(gbc, 6);
6006
ed7a232d570a cosmetics: rename ac3 decoder variables
jbr
parents: 6005
diff changeset
978 if (bandwidth_code > 60) {
8134
10541875e559 add a line break in error message text
jbr
parents: 8133
diff changeset
979 av_log(s->avctx, AV_LOG_ERROR, "bandwidth code = %d > 60\n", bandwidth_code);
5305
5892b4a6380b AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents: 5304
diff changeset
980 return -1;
5892b4a6380b AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents: 5304
diff changeset
981 }
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
982 s->end_freq[ch] = bandwidth_code * 3 + 73;
5304
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
983 }
7027
1edec36c02c5 store exp_strategy for all blocks in decode context
jbr
parents: 7026
diff changeset
984 group_size = 3 << (s->exp_strategy[blk][ch] - 1);
6957
6eb895971766 only calculate number of exponent groups when exponents are not reused.
jbr
parents: 6956
diff changeset
985 s->num_exp_groups[ch] = (s->end_freq[ch]+group_size-4) / group_size;
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
986 if(blk > 0 && s->end_freq[ch] != prev)
5476
e50f0d583a36 consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents: 5475
diff changeset
987 memset(bit_alloc_stages, 3, AC3_MAX_CHANNELS);
5305
5892b4a6380b AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents: 5304
diff changeset
988 }
5461
c427d8950769 cosmetics: use braces when it makes the code easier to read.
jbr
parents: 5460
diff changeset
989 }
7027
1edec36c02c5 store exp_strategy for all blocks in decode context
jbr
parents: 7026
diff changeset
990 if (cpl_in_use && s->exp_strategy[blk][CPL_CH] != EXP_REUSE) {
6957
6eb895971766 only calculate number of exponent groups when exponents are not reused.
jbr
parents: 6956
diff changeset
991 s->num_exp_groups[CPL_CH] = (s->end_freq[CPL_CH] - s->start_freq[CPL_CH]) /
7027
1edec36c02c5 store exp_strategy for all blocks in decode context
jbr
parents: 7026
diff changeset
992 (3 << (s->exp_strategy[blk][CPL_CH] - 1));
6957
6eb895971766 only calculate number of exponent groups when exponents are not reused.
jbr
parents: 6956
diff changeset
993 }
5309
0662a270aab7 AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents: 5308
diff changeset
994
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
995 /* decode exponents for each channel */
7026
4bd2ccb0619e store cpl_in_use for all blocks in decode context
jbr
parents: 7020
diff changeset
996 for (ch = !cpl_in_use; ch <= s->channels; ch++) {
7027
1edec36c02c5 store exp_strategy for all blocks in decode context
jbr
parents: 7026
diff changeset
997 if (s->exp_strategy[blk][ch] != EXP_REUSE) {
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
998 s->dexps[ch][0] = get_bits(gbc, 4) << !ch;
8268
4dd63fc58a87 ac3dec: detect out-of-range exponents
jbr
parents: 8255
diff changeset
999 if (decode_exponents(gbc, s->exp_strategy[blk][ch],
8269
e7949e116f56 cosmetics: reindent after last commit
jbr
parents: 8268
diff changeset
1000 s->num_exp_groups[ch], s->dexps[ch][0],
e7949e116f56 cosmetics: reindent after last commit
jbr
parents: 8268
diff changeset
1001 &s->dexps[ch][s->start_freq[ch]+!!ch])) {
8268
4dd63fc58a87 ac3dec: detect out-of-range exponents
jbr
parents: 8255
diff changeset
1002 av_log(s->avctx, AV_LOG_ERROR, "exponent out-of-range\n");
4dd63fc58a87 ac3dec: detect out-of-range exponents
jbr
parents: 8255
diff changeset
1003 return -1;
4dd63fc58a87 ac3dec: detect out-of-range exponents
jbr
parents: 8255
diff changeset
1004 }
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
1005 if(ch != CPL_CH && ch != s->lfe_ch)
6089
12a77958941f cosmetics: rename GetBitContext gb to gbc
jbr
parents: 6088
diff changeset
1006 skip_bits(gbc, 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
1007 }
5461
c427d8950769 cosmetics: use braces when it makes the code easier to read.
jbr
parents: 5460
diff changeset
1008 }
5309
0662a270aab7 AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents: 5308
diff changeset
1009
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
1010 /* bit allocation information */
7626
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
1011 if (s->bit_allocation_syntax) {
7627
93c5703328d6 cosmetics: indentation
jbr
parents: 7626
diff changeset
1012 if (get_bits1(gbc)) {
93c5703328d6 cosmetics: indentation
jbr
parents: 7626
diff changeset
1013 s->bit_alloc_params.slow_decay = ff_ac3_slow_decay_tab[get_bits(gbc, 2)] >> s->bit_alloc_params.sr_shift;
93c5703328d6 cosmetics: indentation
jbr
parents: 7626
diff changeset
1014 s->bit_alloc_params.fast_decay = ff_ac3_fast_decay_tab[get_bits(gbc, 2)] >> s->bit_alloc_params.sr_shift;
93c5703328d6 cosmetics: indentation
jbr
parents: 7626
diff changeset
1015 s->bit_alloc_params.slow_gain = ff_ac3_slow_gain_tab[get_bits(gbc, 2)];
93c5703328d6 cosmetics: indentation
jbr
parents: 7626
diff changeset
1016 s->bit_alloc_params.db_per_bit = ff_ac3_db_per_bit_tab[get_bits(gbc, 2)];
8142
f17b1eb9ccd1 revert r15812 (E-AC-3 Spectral Extension) pending further review
jbr
parents: 8139
diff changeset
1017 s->bit_alloc_params.floor = ff_ac3_floor_tab[get_bits(gbc, 3)];
7627
93c5703328d6 cosmetics: indentation
jbr
parents: 7626
diff changeset
1018 for(ch=!cpl_in_use; ch<=s->channels; ch++)
93c5703328d6 cosmetics: indentation
jbr
parents: 7626
diff changeset
1019 bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2);
93c5703328d6 cosmetics: indentation
jbr
parents: 7626
diff changeset
1020 } else if (!blk) {
93c5703328d6 cosmetics: indentation
jbr
parents: 7626
diff changeset
1021 av_log(s->avctx, AV_LOG_ERROR, "new bit allocation info must be present in block 0\n");
93c5703328d6 cosmetics: indentation
jbr
parents: 7626
diff changeset
1022 return -1;
93c5703328d6 cosmetics: indentation
jbr
parents: 7626
diff changeset
1023 }
7626
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
1024 }
5309
0662a270aab7 AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents: 5308
diff changeset
1025
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
1026 /* signal-to-noise ratio offsets and fast gains (signal-to-mask ratios) */
7747
54bcd7270fd9 commit more OKed parts of the E-AC-3 decoder
jbr
parents: 7746
diff changeset
1027 if(!s->eac3 || !blk){
54bcd7270fd9 commit more OKed parts of the E-AC-3 decoder
jbr
parents: 7746
diff changeset
1028 if(s->snr_offset_strategy && get_bits1(gbc)) {
7749
f44fc478863f cosmetics: indentation
jbr
parents: 7747
diff changeset
1029 int snr = 0;
f44fc478863f cosmetics: indentation
jbr
parents: 7747
diff changeset
1030 int csnr;
f44fc478863f cosmetics: indentation
jbr
parents: 7747
diff changeset
1031 csnr = (get_bits(gbc, 6) - 15) << 4;
f44fc478863f cosmetics: indentation
jbr
parents: 7747
diff changeset
1032 for (i = ch = !cpl_in_use; ch <= s->channels; ch++) {
f44fc478863f cosmetics: indentation
jbr
parents: 7747
diff changeset
1033 /* snr offset */
f44fc478863f cosmetics: indentation
jbr
parents: 7747
diff changeset
1034 if (ch == i || s->snr_offset_strategy == 2)
f44fc478863f cosmetics: indentation
jbr
parents: 7747
diff changeset
1035 snr = (csnr + get_bits(gbc, 4)) << 2;
f44fc478863f cosmetics: indentation
jbr
parents: 7747
diff changeset
1036 /* run at least last bit allocation stage if snr offset changes */
f44fc478863f cosmetics: indentation
jbr
parents: 7747
diff changeset
1037 if(blk && s->snr_offset[ch] != snr) {
f44fc478863f cosmetics: indentation
jbr
parents: 7747
diff changeset
1038 bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 1);
f44fc478863f cosmetics: indentation
jbr
parents: 7747
diff changeset
1039 }
f44fc478863f cosmetics: indentation
jbr
parents: 7747
diff changeset
1040 s->snr_offset[ch] = snr;
7747
54bcd7270fd9 commit more OKed parts of the E-AC-3 decoder
jbr
parents: 7746
diff changeset
1041
54bcd7270fd9 commit more OKed parts of the E-AC-3 decoder
jbr
parents: 7746
diff changeset
1042 /* fast gain (normal AC-3 only) */
54bcd7270fd9 commit more OKed parts of the E-AC-3 decoder
jbr
parents: 7746
diff changeset
1043 if (!s->eac3) {
54bcd7270fd9 commit more OKed parts of the E-AC-3 decoder
jbr
parents: 7746
diff changeset
1044 int prev = s->fast_gain[ch];
7749
f44fc478863f cosmetics: indentation
jbr
parents: 7747
diff changeset
1045 s->fast_gain[ch] = ff_ac3_fast_gain_tab[get_bits(gbc, 3)];
7747
54bcd7270fd9 commit more OKed parts of the E-AC-3 decoder
jbr
parents: 7746
diff changeset
1046 /* run last 2 bit allocation stages if fast gain changes */
54bcd7270fd9 commit more OKed parts of the E-AC-3 decoder
jbr
parents: 7746
diff changeset
1047 if(blk && prev != s->fast_gain[ch])
54bcd7270fd9 commit more OKed parts of the E-AC-3 decoder
jbr
parents: 7746
diff changeset
1048 bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2);
54bcd7270fd9 commit more OKed parts of the E-AC-3 decoder
jbr
parents: 7746
diff changeset
1049 }
7749
f44fc478863f cosmetics: indentation
jbr
parents: 7747
diff changeset
1050 }
7747
54bcd7270fd9 commit more OKed parts of the E-AC-3 decoder
jbr
parents: 7746
diff changeset
1051 } else if (!s->eac3 && !blk) {
7749
f44fc478863f cosmetics: indentation
jbr
parents: 7747
diff changeset
1052 av_log(s->avctx, AV_LOG_ERROR, "new snr offsets must be present in block 0\n");
f44fc478863f cosmetics: indentation
jbr
parents: 7747
diff changeset
1053 return -1;
7747
54bcd7270fd9 commit more OKed parts of the E-AC-3 decoder
jbr
parents: 7746
diff changeset
1054 }
5303
b8821ff5c30d AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff changeset
1055 }
5309
0662a270aab7 AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents: 5308
diff changeset
1056
7664
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
1057 /* fast gain (E-AC-3 only) */
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
1058 if (s->fast_gain_syntax && get_bits1(gbc)) {
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
1059 for (ch = !cpl_in_use; ch <= s->channels; ch++) {
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
1060 int prev = s->fast_gain[ch];
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
1061 s->fast_gain[ch] = ff_ac3_fast_gain_tab[get_bits(gbc, 3)];
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
1062 /* run last 2 bit allocation stages if fast gain changes */
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
1063 if(blk && prev != s->fast_gain[ch])
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
1064 bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2);
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
1065 }
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
1066 } else if (s->eac3 && !blk) {
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
1067 for (ch = !cpl_in_use; ch <= s->channels; ch++)
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
1068 s->fast_gain[ch] = ff_ac3_fast_gain_tab[4];
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
1069 }
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
1070
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
1071 /* E-AC-3 to AC-3 converter SNR offset */
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
1072 if (s->frame_type == EAC3_FRAME_TYPE_INDEPENDENT && get_bits1(gbc)) {
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
1073 skip_bits(gbc, 10); // skip converter snr offset
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
1074 }
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
1075
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
1076 /* coupling leak information */
7026
4bd2ccb0619e store cpl_in_use for all blocks in decode context
jbr
parents: 7020
diff changeset
1077 if (cpl_in_use) {
7747
54bcd7270fd9 commit more OKed parts of the E-AC-3 decoder
jbr
parents: 7746
diff changeset
1078 if (s->first_cpl_leak || get_bits1(gbc)) {
54bcd7270fd9 commit more OKed parts of the E-AC-3 decoder
jbr
parents: 7746
diff changeset
1079 int fl = get_bits(gbc, 3);
54bcd7270fd9 commit more OKed parts of the E-AC-3 decoder
jbr
parents: 7746
diff changeset
1080 int sl = get_bits(gbc, 3);
54bcd7270fd9 commit more OKed parts of the E-AC-3 decoder
jbr
parents: 7746
diff changeset
1081 /* run last 2 bit allocation stages for coupling channel if
54bcd7270fd9 commit more OKed parts of the E-AC-3 decoder
jbr
parents: 7746
diff changeset
1082 coupling leak changes */
54bcd7270fd9 commit more OKed parts of the E-AC-3 decoder
jbr
parents: 7746
diff changeset
1083 if(blk && (fl != s->bit_alloc_params.cpl_fast_leak ||
54bcd7270fd9 commit more OKed parts of the E-AC-3 decoder
jbr
parents: 7746
diff changeset
1084 sl != s->bit_alloc_params.cpl_slow_leak)) {
7749
f44fc478863f cosmetics: indentation
jbr
parents: 7747
diff changeset
1085 bit_alloc_stages[CPL_CH] = FFMAX(bit_alloc_stages[CPL_CH], 2);
7747
54bcd7270fd9 commit more OKed parts of the E-AC-3 decoder
jbr
parents: 7746
diff changeset
1086 }
54bcd7270fd9 commit more OKed parts of the E-AC-3 decoder
jbr
parents: 7746
diff changeset
1087 s->bit_alloc_params.cpl_fast_leak = fl;
54bcd7270fd9 commit more OKed parts of the E-AC-3 decoder
jbr
parents: 7746
diff changeset
1088 s->bit_alloc_params.cpl_slow_leak = sl;
54bcd7270fd9 commit more OKed parts of the E-AC-3 decoder
jbr
parents: 7746
diff changeset
1089 } else if (!s->eac3 && !blk) {
6872
60236c4f0b76 cosmetics: indent
jbr
parents: 6871
diff changeset
1090 av_log(s->avctx, AV_LOG_ERROR, "new coupling leak info must be present in block 0\n");
60236c4f0b76 cosmetics: indent
jbr
parents: 6871
diff changeset
1091 return -1;
60236c4f0b76 cosmetics: indent
jbr
parents: 6871
diff changeset
1092 }
7747
54bcd7270fd9 commit more OKed parts of the E-AC-3 decoder
jbr
parents: 7746
diff changeset
1093 s->first_cpl_leak = 0;
6871
dc6c9f74f2c1 10l: fix error in commit r13382
jbr
parents: 6869
diff changeset
1094 }
5309
0662a270aab7 AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents: 5308
diff changeset
1095
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
1096 /* delta bit allocation information */
7626
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
1097 if (s->dba_syntax && get_bits1(gbc)) {
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
1098 /* delta bit allocation exists (strategy) */
7026
4bd2ccb0619e store cpl_in_use for all blocks in decode context
jbr
parents: 7020
diff changeset
1099 for (ch = !cpl_in_use; ch <= fbw_channels; ch++) {
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
1100 s->dba_mode[ch] = get_bits(gbc, 2);
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
1101 if (s->dba_mode[ch] == DBA_RESERVED) {
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
1102 av_log(s->avctx, AV_LOG_ERROR, "delta bit allocation strategy reserved\n");
5304
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
1103 return -1;
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
1104 }
5476
e50f0d583a36 consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents: 5475
diff changeset
1105 bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2);
5304
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
1106 }
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
1107 /* channel delta offset, len and bit allocation */
7026
4bd2ccb0619e store cpl_in_use for all blocks in decode context
jbr
parents: 7020
diff changeset
1108 for (ch = !cpl_in_use; ch <= fbw_channels; ch++) {
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
1109 if (s->dba_mode[ch] == DBA_NEW) {
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
1110 s->dba_nsegs[ch] = get_bits(gbc, 3);
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
1111 for (seg = 0; seg <= s->dba_nsegs[ch]; seg++) {
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
1112 s->dba_offsets[ch][seg] = get_bits(gbc, 5);
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
1113 s->dba_lengths[ch][seg] = get_bits(gbc, 4);
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
1114 s->dba_values[ch][seg] = get_bits(gbc, 3);
5304
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
1115 }
6954
57797b6c9d59 new dba values requires running last 2 bit allocation stages
jbr
parents: 6953
diff changeset
1116 /* run last 2 bit allocation stages if new dba values */
57797b6c9d59 new dba values requires running last 2 bit allocation stages
jbr
parents: 6953
diff changeset
1117 bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2);
5304
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
1118 }
5461
c427d8950769 cosmetics: use braces when it makes the code easier to read.
jbr
parents: 5460
diff changeset
1119 }
5386
d6347c3cb329 Use shared AC-3 header parsing. Move some initializations to block parsing function.
jbr
parents: 5385
diff changeset
1120 } else if(blk == 0) {
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
1121 for(ch=0; ch<=s->channels; ch++) {
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
1122 s->dba_mode[ch] = DBA_NONE;
5386
d6347c3cb329 Use shared AC-3 header parsing. Move some initializations to block parsing function.
jbr
parents: 5385
diff changeset
1123 }
5303
b8821ff5c30d AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff changeset
1124 }
5305
5892b4a6380b AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents: 5304
diff changeset
1125
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
1126 /* Bit allocation */
7026
4bd2ccb0619e store cpl_in_use for all blocks in decode context
jbr
parents: 7020
diff changeset
1127 for(ch=!cpl_in_use; ch<=s->channels; ch++) {
5476
e50f0d583a36 consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents: 5475
diff changeset
1128 if(bit_alloc_stages[ch] > 2) {
e50f0d583a36 consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents: 5475
diff changeset
1129 /* Exponent mapping into PSD and PSD integration */
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
1130 ff_ac3_bit_alloc_calc_psd(s->dexps[ch],
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
1131 s->start_freq[ch], s->end_freq[ch],
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
1132 s->psd[ch], s->band_psd[ch]);
5461
c427d8950769 cosmetics: use braces when it makes the code easier to read.
jbr
parents: 5460
diff changeset
1133 }
5476
e50f0d583a36 consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents: 5475
diff changeset
1134 if(bit_alloc_stages[ch] > 1) {
e50f0d583a36 consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents: 5475
diff changeset
1135 /* Compute excitation function, Compute masking curve, and
e50f0d583a36 consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents: 5475
diff changeset
1136 Apply delta bit allocation */
8279
6c2dcc1410bb ac3: detect dba errors and prevent writing past end of array
jbr
parents: 8275
diff changeset
1137 if (ff_ac3_bit_alloc_calc_mask(&s->bit_alloc_params, s->band_psd[ch],
8280
63aba08af550 cosmetics: alignment after last commit
jbr
parents: 8279
diff changeset
1138 s->start_freq[ch], s->end_freq[ch],
63aba08af550 cosmetics: alignment after last commit
jbr
parents: 8279
diff changeset
1139 s->fast_gain[ch], (ch == s->lfe_ch),
63aba08af550 cosmetics: alignment after last commit
jbr
parents: 8279
diff changeset
1140 s->dba_mode[ch], s->dba_nsegs[ch],
63aba08af550 cosmetics: alignment after last commit
jbr
parents: 8279
diff changeset
1141 s->dba_offsets[ch], s->dba_lengths[ch],
63aba08af550 cosmetics: alignment after last commit
jbr
parents: 8279
diff changeset
1142 s->dba_values[ch], s->mask[ch])) {
8279
6c2dcc1410bb ac3: detect dba errors and prevent writing past end of array
jbr
parents: 8275
diff changeset
1143 av_log(s->avctx, AV_LOG_ERROR, "error in bit allocation\n");
6c2dcc1410bb ac3: detect dba errors and prevent writing past end of array
jbr
parents: 8275
diff changeset
1144 return -1;
6c2dcc1410bb ac3: detect dba errors and prevent writing past end of array
jbr
parents: 8275
diff changeset
1145 }
5461
c427d8950769 cosmetics: use braces when it makes the code easier to read.
jbr
parents: 5460
diff changeset
1146 }
5476
e50f0d583a36 consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents: 5475
diff changeset
1147 if(bit_alloc_stages[ch] > 0) {
e50f0d583a36 consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents: 5475
diff changeset
1148 /* Compute bit allocation */
7626
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
1149 const uint8_t *bap_tab = s->channel_uses_aht[ch] ?
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
1150 ff_eac3_hebap_tab : ff_ac3_bap_tab;
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
1151 ff_ac3_bit_alloc_calc_bap(s->mask[ch], s->psd[ch],
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
1152 s->start_freq[ch], s->end_freq[ch],
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
1153 s->snr_offset[ch],
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
1154 s->bit_alloc_params.floor,
7626
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
1155 bap_tab, s->bap[ch]);
5461
c427d8950769 cosmetics: use braces when it makes the code easier to read.
jbr
parents: 5460
diff changeset
1156 }
5310
9aa9197034d7 AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents: 5309
diff changeset
1157 }
5309
0662a270aab7 AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents: 5308
diff changeset
1158
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
1159 /* unused dummy data */
7626
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
1160 if (s->skip_syntax && get_bits1(gbc)) {
6089
12a77958941f cosmetics: rename GetBitContext gb to gbc
jbr
parents: 6088
diff changeset
1161 int skipl = get_bits(gbc, 9);
5309
0662a270aab7 AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents: 5308
diff changeset
1162 while(skipl--)
6089
12a77958941f cosmetics: rename GetBitContext gb to gbc
jbr
parents: 6088
diff changeset
1163 skip_bits(gbc, 8);
5304
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
1164 }
5499
838ba4dafaae cosmetics: blank lines, remove some comments
jbr
parents: 5498
diff changeset
1165
5304
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
1166 /* unpack the transform coefficients
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
1167 this also uncouples channels if coupling is in use. */
7702
f91e273722c8 add more OKed parts of the E-AC-3 decoder: structural changes to support AHT mode mantissa decoding
jbr
parents: 7701
diff changeset
1168 decode_transform_coeffs(s, blk);
5306
abc5c130b448 AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents: 5305
diff changeset
1169
7626
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
1170 /* TODO: generate enhanced coupling coordinates and uncouple */
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
1171
8142
f17b1eb9ccd1 revert r15812 (E-AC-3 Spectral Extension) pending further review
jbr
parents: 8139
diff changeset
1172 /* TODO: apply spectral extension */
f17b1eb9ccd1 revert r15812 (E-AC-3 Spectral Extension) pending further review
jbr
parents: 8139
diff changeset
1173
5304
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
1174 /* recover coefficients if rematrixing is in use */
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
1175 if(s->channel_mode == AC3_CHMODE_STEREO)
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
1176 do_rematrixing(s);
5304
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
1177
6032
f74202e7e896 Skip dialog normalization. It shouldn't be used by the decoder, and there is
jbr
parents: 6031
diff changeset
1178 /* apply scaling to coefficients (headroom, dynrng) */
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
1179 for(ch=1; ch<=s->channels; ch++) {
6430
de7502093922 Use 24-bit fixed-point transform coefficients until just before MDCT. This
jbr
parents: 6142
diff changeset
1180 float gain = s->mul_bias / 4194304.0f;
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
1181 if(s->channel_mode == AC3_CHMODE_DUALMONO) {
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
1182 gain *= s->dynamic_range[ch-1];
5412
3f6a6dda6b2d remove broken downmixing. will add new implementation later.
jbr
parents: 5393
diff changeset
1183 } else {
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
1184 gain *= s->dynamic_range[0];
5412
3f6a6dda6b2d remove broken downmixing. will add new implementation later.
jbr
parents: 5393
diff changeset
1185 }
7564
7cf793954871 simd int->float
lorenm
parents: 7563
diff changeset
1186 s->dsp.int32_to_float_fmul_scalar(s->transform_coeffs[ch], s->fixed_coeffs[ch], gain, 256);
5412
3f6a6dda6b2d remove broken downmixing. will add new implementation later.
jbr
parents: 5393
diff changeset
1187 }
5318
ef4ef249ca72 AC-3 decoder, soc revision 58, Aug 19 14:20:45 2006 UTC by cloud9
jbr
parents: 5317
diff changeset
1188
6480
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
1189 /* downmix and MDCT. order depends on whether block switching is used for
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
1190 any channel in this block. this is because coefficients for the long
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
1191 and short transforms cannot be mixed. */
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
1192 downmix_output = s->channels != s->out_channels &&
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
1193 !((s->output_mode & AC3_OUTPUT_LFEON) &&
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
1194 s->fbw_channels == s->out_channels);
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
1195 if(different_transforms) {
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
1196 /* the delay samples have already been downmixed, so we upmix the delay
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
1197 samples in order to reconstruct all channels before downmixing. */
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
1198 if(s->downmixed) {
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
1199 s->downmixed = 0;
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
1200 ac3_upmix_delay(s);
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
1201 }
5306
abc5c130b448 AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents: 5305
diff changeset
1202
6480
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
1203 do_imdct(s, s->channels);
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
1204
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
1205 if(downmix_output) {
7563
8390efaa0c03 simd downmix
lorenm
parents: 7562
diff changeset
1206 s->dsp.ac3_downmix(s->output, s->downmix_coeffs, s->out_channels, s->fbw_channels, 256);
6480
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
1207 }
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
1208 } else {
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
1209 if(downmix_output) {
7563
8390efaa0c03 simd downmix
lorenm
parents: 7562
diff changeset
1210 s->dsp.ac3_downmix(s->transform_coeffs+1, s->downmix_coeffs, s->out_channels, s->fbw_channels, 256);
6480
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
1211 }
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
1212
7562
ef456ee01ea2 don't mark the delayed samples for upmixing if they haven't been downmixed
lorenm
parents: 7561
diff changeset
1213 if(downmix_output && !s->downmixed) {
6480
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
1214 s->downmixed = 1;
7563
8390efaa0c03 simd downmix
lorenm
parents: 7562
diff changeset
1215 s->dsp.ac3_downmix(s->delay, s->downmix_coeffs, s->out_channels, s->fbw_channels, 128);
6480
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
1216 }
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
1217
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
1218 do_imdct(s, s->out_channels);
5480
930bca6dd95f add support for downmixing to stereo or mono
jbr
parents: 5479
diff changeset
1219 }
930bca6dd95f add support for downmixing to stereo or mono
jbr
parents: 5479
diff changeset
1220
5479
943c732c905d use dsputil for float to signed 16-bit sample conversion
jbr
parents: 5477
diff changeset
1221 return 0;
5306
abc5c130b448 AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents: 5305
diff changeset
1222 }
abc5c130b448 AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents: 5305
diff changeset
1223
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
1224 /**
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
1225 * Decode a single AC-3 frame.
5321
fcb2a52c88fe AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents: 5320
diff changeset
1226 */
6487
8f1b27d73a07 make input buffer const, as it should be. fixes a warning.
jbr
parents: 6480
diff changeset
1227 static int ac3_decode_frame(AVCodecContext * avctx, void *data, int *data_size,
8f1b27d73a07 make input buffer const, as it should be. fixes a warning.
jbr
parents: 6480
diff changeset
1228 const 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
1229 {
6092
42bdc549a500 do not need to cast a (void *)
jbr
parents: 6091
diff changeset
1230 AC3DecodeContext *s = avctx->priv_data;
5305
5892b4a6380b AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents: 5304
diff changeset
1231 int16_t *out_samples = (int16_t *)data;
7550
f9e4afa46993 use float_to_int16_interleave in ac3
lorenm
parents: 7549
diff changeset
1232 int blk, ch, err;
5318
ef4ef249ca72 AC-3 decoder, soc revision 58, Aug 19 14:20:45 2006 UTC by cloud9
jbr
parents: 5317
diff changeset
1233
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
1234 /* initialize the GetBitContext with the start of valid AC-3 Frame */
6538
b8f886bce6f5 only allocate context input buffer if AVCodecContext.error_reslience is greater than 0.
jbr
parents: 6537
diff changeset
1235 if (s->input_buffer) {
6536
8f2186d5daca additional protection from segmentation faults and memory access errors by
jbr
parents: 6529
diff changeset
1236 /* copy input buffer to decoder context to avoid reading past the end
8f2186d5daca additional protection from segmentation faults and memory access errors by
jbr
parents: 6529
diff changeset
1237 of the buffer, which can be caused by a damaged input stream. */
7624
545305ba44a0 rename AC3_MAX_FRAME_SIZE to AC3_FRAME_BUFFER_SIZE and increase the size
jbr
parents: 7603
diff changeset
1238 memcpy(s->input_buffer, buf, FFMIN(buf_size, AC3_FRAME_BUFFER_SIZE));
6536
8f2186d5daca additional protection from segmentation faults and memory access errors by
jbr
parents: 6529
diff changeset
1239 init_get_bits(&s->gbc, s->input_buffer, buf_size * 8);
8f2186d5daca additional protection from segmentation faults and memory access errors by
jbr
parents: 6529
diff changeset
1240 } else {
6537
ea2f7235c3e1 cosmetics: indentation after last commit
jbr
parents: 6536
diff changeset
1241 init_get_bits(&s->gbc, buf, buf_size * 8);
6536
8f2186d5daca additional protection from segmentation faults and memory access errors by
jbr
parents: 6529
diff changeset
1242 }
5305
5892b4a6380b AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents: 5304
diff changeset
1243
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
1244 /* parse the syncinfo */
6950
ec4e01cb0089 move header error logging to after CRC check
jbr
parents: 6906
diff changeset
1245 *data_size = 0;
7028
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
1246 err = parse_frame_header(s);
6950
ec4e01cb0089 move header error logging to after CRC check
jbr
parents: 6906
diff changeset
1247
ec4e01cb0089 move header error logging to after CRC check
jbr
parents: 6906
diff changeset
1248 /* check that reported frame size fits in input buffer */
ec4e01cb0089 move header error logging to after CRC check
jbr
parents: 6906
diff changeset
1249 if(s->frame_size > buf_size) {
ec4e01cb0089 move header error logging to after CRC check
jbr
parents: 6906
diff changeset
1250 av_log(avctx, AV_LOG_ERROR, "incomplete frame\n");
ec4e01cb0089 move header error logging to after CRC check
jbr
parents: 6906
diff changeset
1251 err = AC3_PARSE_ERROR_FRAME_SIZE;
ec4e01cb0089 move header error logging to after CRC check
jbr
parents: 6906
diff changeset
1252 }
ec4e01cb0089 move header error logging to after CRC check
jbr
parents: 6906
diff changeset
1253
ec4e01cb0089 move header error logging to after CRC check
jbr
parents: 6906
diff changeset
1254 /* check for crc mismatch */
7831
8195c970d077 Rename error_resilience to error_recognition.
michael
parents: 7769
diff changeset
1255 if(err != AC3_PARSE_ERROR_FRAME_SIZE && avctx->error_recognition >= FF_ER_CAREFUL) {
6950
ec4e01cb0089 move header error logging to after CRC check
jbr
parents: 6906
diff changeset
1256 if(av_crc(av_crc_get_table(AV_CRC_16_ANSI), 0, &buf[2], s->frame_size-2)) {
ec4e01cb0089 move header error logging to after CRC check
jbr
parents: 6906
diff changeset
1257 av_log(avctx, AV_LOG_ERROR, "frame CRC mismatch\n");
6951
4c1b8b50313c use enum value for CRC error
jbr
parents: 6950
diff changeset
1258 err = AC3_PARSE_ERROR_CRC;
6950
ec4e01cb0089 move header error logging to after CRC check
jbr
parents: 6906
diff changeset
1259 }
ec4e01cb0089 move header error logging to after CRC check
jbr
parents: 6906
diff changeset
1260 }
ec4e01cb0089 move header error logging to after CRC check
jbr
parents: 6906
diff changeset
1261
6951
4c1b8b50313c use enum value for CRC error
jbr
parents: 6950
diff changeset
1262 if(err && err != AC3_PARSE_ERROR_CRC) {
5680
5ae5a74b0e4b better AC3 header error reporting
jbr
parents: 5679
diff changeset
1263 switch(err) {
5ae5a74b0e4b better AC3 header error reporting
jbr
parents: 5679
diff changeset
1264 case AC3_PARSE_ERROR_SYNC:
6950
ec4e01cb0089 move header error logging to after CRC check
jbr
parents: 6906
diff changeset
1265 av_log(avctx, AV_LOG_ERROR, "frame sync error\n");
6999
3d84a99ecfa7 return error on frame sync error
jbr
parents: 6960
diff changeset
1266 return -1;
5680
5ae5a74b0e4b better AC3 header error reporting
jbr
parents: 5679
diff changeset
1267 case AC3_PARSE_ERROR_BSID:
5ae5a74b0e4b better AC3 header error reporting
jbr
parents: 5679
diff changeset
1268 av_log(avctx, AV_LOG_ERROR, "invalid bitstream id\n");
5ae5a74b0e4b better AC3 header error reporting
jbr
parents: 5679
diff changeset
1269 break;
5ae5a74b0e4b better AC3 header error reporting
jbr
parents: 5679
diff changeset
1270 case AC3_PARSE_ERROR_SAMPLE_RATE:
5ae5a74b0e4b better AC3 header error reporting
jbr
parents: 5679
diff changeset
1271 av_log(avctx, AV_LOG_ERROR, "invalid sample rate\n");
5ae5a74b0e4b better AC3 header error reporting
jbr
parents: 5679
diff changeset
1272 break;
5ae5a74b0e4b better AC3 header error reporting
jbr
parents: 5679
diff changeset
1273 case AC3_PARSE_ERROR_FRAME_SIZE:
5ae5a74b0e4b better AC3 header error reporting
jbr
parents: 5679
diff changeset
1274 av_log(avctx, AV_LOG_ERROR, "invalid frame size\n");
5ae5a74b0e4b better AC3 header error reporting
jbr
parents: 5679
diff changeset
1275 break;
6540
b0d44aec1ec0 change name from stream type to frame type in AC3 code
bwolowiec
parents: 6538
diff changeset
1276 case AC3_PARSE_ERROR_FRAME_TYPE:
7014
24ddcb54f147 skip unsupported frame types and substream id's
jbr
parents: 7013
diff changeset
1277 /* skip frame if CRC is ok. otherwise use error concealment. */
24ddcb54f147 skip unsupported frame types and substream id's
jbr
parents: 7013
diff changeset
1278 /* TODO: add support for substreams and dependent frames */
24ddcb54f147 skip unsupported frame types and substream id's
jbr
parents: 7013
diff changeset
1279 if(s->frame_type == EAC3_FRAME_TYPE_DEPENDENT || s->substreamid) {
24ddcb54f147 skip unsupported frame types and substream id's
jbr
parents: 7013
diff changeset
1280 av_log(avctx, AV_LOG_ERROR, "unsupported frame type : skipping frame\n");
24ddcb54f147 skip unsupported frame types and substream id's
jbr
parents: 7013
diff changeset
1281 return s->frame_size;
24ddcb54f147 skip unsupported frame types and substream id's
jbr
parents: 7013
diff changeset
1282 } else {
7015
d9ac2c5a5d89 cosmetics: indent
jbr
parents: 7014
diff changeset
1283 av_log(avctx, AV_LOG_ERROR, "invalid frame type\n");
7014
24ddcb54f147 skip unsupported frame types and substream id's
jbr
parents: 7013
diff changeset
1284 }
6529
5542d0c04a55 using stream type in eac3 parser
bwolowiec
parents: 6517
diff changeset
1285 break;
5680
5ae5a74b0e4b better AC3 header error reporting
jbr
parents: 5679
diff changeset
1286 default:
5ae5a74b0e4b better AC3 header error reporting
jbr
parents: 5679
diff changeset
1287 av_log(avctx, AV_LOG_ERROR, "invalid header\n");
5ae5a74b0e4b better AC3 header error reporting
jbr
parents: 5679
diff changeset
1288 break;
5ae5a74b0e4b better AC3 header error reporting
jbr
parents: 5679
diff changeset
1289 }
5304
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
1290 }
5303
b8821ff5c30d AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff changeset
1291
6889
ff5fd5a1abf5 safer solution for setting audio parameters
jbr
parents: 6886
diff changeset
1292 /* if frame is ok, set audio parameters */
ff5fd5a1abf5 safer solution for setting audio parameters
jbr
parents: 6886
diff changeset
1293 if (!err) {
6885
5554f5ab2c19 cosmetics: indent
jbr
parents: 6884
diff changeset
1294 avctx->sample_rate = s->sample_rate;
5554f5ab2c19 cosmetics: indent
jbr
parents: 6884
diff changeset
1295 avctx->bit_rate = s->bit_rate;
6098
b7905ea98b8f add crc check to ac3 decoder
jbr
parents: 6095
diff changeset
1296
6885
5554f5ab2c19 cosmetics: indent
jbr
parents: 6884
diff changeset
1297 /* channel config */
5554f5ab2c19 cosmetics: indent
jbr
parents: 6884
diff changeset
1298 s->out_channels = s->channels;
6889
ff5fd5a1abf5 safer solution for setting audio parameters
jbr
parents: 6886
diff changeset
1299 s->output_mode = s->channel_mode;
ff5fd5a1abf5 safer solution for setting audio parameters
jbr
parents: 6886
diff changeset
1300 if(s->lfe_on)
ff5fd5a1abf5 safer solution for setting audio parameters
jbr
parents: 6886
diff changeset
1301 s->output_mode |= AC3_OUTPUT_LFEON;
6885
5554f5ab2c19 cosmetics: indent
jbr
parents: 6884
diff changeset
1302 if (avctx->request_channels > 0 && avctx->request_channels <= 2 &&
5554f5ab2c19 cosmetics: indent
jbr
parents: 6884
diff changeset
1303 avctx->request_channels < s->channels) {
5554f5ab2c19 cosmetics: indent
jbr
parents: 6884
diff changeset
1304 s->out_channels = avctx->request_channels;
5554f5ab2c19 cosmetics: indent
jbr
parents: 6884
diff changeset
1305 s->output_mode = avctx->request_channels == 1 ? AC3_CHMODE_MONO : AC3_CHMODE_STEREO;
5554f5ab2c19 cosmetics: indent
jbr
parents: 6884
diff changeset
1306 }
5554f5ab2c19 cosmetics: indent
jbr
parents: 6884
diff changeset
1307 avctx->channels = s->out_channels;
5303
b8821ff5c30d AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff changeset
1308
6885
5554f5ab2c19 cosmetics: indent
jbr
parents: 6884
diff changeset
1309 /* set downmixing coefficients if needed */
5554f5ab2c19 cosmetics: indent
jbr
parents: 6884
diff changeset
1310 if(s->channels != s->out_channels && !((s->output_mode & AC3_OUTPUT_LFEON) &&
5554f5ab2c19 cosmetics: indent
jbr
parents: 6884
diff changeset
1311 s->fbw_channels == s->out_channels)) {
5554f5ab2c19 cosmetics: indent
jbr
parents: 6884
diff changeset
1312 set_downmix_coeffs(s);
5554f5ab2c19 cosmetics: indent
jbr
parents: 6884
diff changeset
1313 }
6889
ff5fd5a1abf5 safer solution for setting audio parameters
jbr
parents: 6886
diff changeset
1314 } else if (!s->out_channels) {
ff5fd5a1abf5 safer solution for setting audio parameters
jbr
parents: 6886
diff changeset
1315 s->out_channels = avctx->channels;
ff5fd5a1abf5 safer solution for setting audio parameters
jbr
parents: 6886
diff changeset
1316 if(s->out_channels < s->channels)
ff5fd5a1abf5 safer solution for setting audio parameters
jbr
parents: 6886
diff changeset
1317 s->output_mode = s->out_channels == 1 ? AC3_CHMODE_MONO : AC3_CHMODE_STEREO;
6884
a790b3ee61b9 add error concealment
jbr
parents: 6872
diff changeset
1318 }
6126
c24cd5282108 split out init of downmix coeffs into a separate function that can be called
jbr
parents: 6125
diff changeset
1319
7490
bddd15a1d167 cosmetics: change function name and comments to refer to block decoding
jbr
parents: 7489
diff changeset
1320 /* decode the audio blocks */
7011
77f607fb4e8b get the number of blocks from the ac3 parser and use in the ac3 decoder.
jbr
parents: 6999
diff changeset
1321 for (blk = 0; blk < s->num_blocks; blk++) {
7550
f9e4afa46993 use float_to_int16_interleave in ac3
lorenm
parents: 7549
diff changeset
1322 const float *output[s->out_channels];
7490
bddd15a1d167 cosmetics: change function name and comments to refer to block decoding
jbr
parents: 7489
diff changeset
1323 if (!err && decode_audio_block(s, blk)) {
bddd15a1d167 cosmetics: change function name and comments to refer to block decoding
jbr
parents: 7489
diff changeset
1324 av_log(avctx, AV_LOG_ERROR, "error decoding the audio block\n");
8249
5057047bcc52 ac3dec: skip decoding and use error concealment for remaining blocks in
jbr
parents: 8142
diff changeset
1325 err = 1;
5304
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
1326 }
7550
f9e4afa46993 use float_to_int16_interleave in ac3
lorenm
parents: 7549
diff changeset
1327 for (ch = 0; ch < s->out_channels; ch++)
f9e4afa46993 use float_to_int16_interleave in ac3
lorenm
parents: 7549
diff changeset
1328 output[ch] = s->output[ch];
f9e4afa46993 use float_to_int16_interleave in ac3
lorenm
parents: 7549
diff changeset
1329 s->dsp.float_to_int16_interleave(out_samples, output, 256, s->out_channels);
f9e4afa46993 use float_to_int16_interleave in ac3
lorenm
parents: 7549
diff changeset
1330 out_samples += 256 * s->out_channels;
5304
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
1331 }
7011
77f607fb4e8b get the number of blocks from the ac3 parser and use in the ac3 decoder.
jbr
parents: 6999
diff changeset
1332 *data_size = s->num_blocks * 256 * avctx->channels * sizeof (int16_t);
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
1333 return s->frame_size;
5303
b8821ff5c30d AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff changeset
1334 }
5304
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
1335
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
1336 /**
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
1337 * Uninitialize the AC-3 decoder.
5321
fcb2a52c88fe AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents: 5320
diff changeset
1338 */
6517
48759bfbd073 Apply 'cold' attribute to init/uninit functions in libavcodec
zuxy
parents: 6487
diff changeset
1339 static av_cold 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
1340 {
6092
42bdc549a500 do not need to cast a (void *)
jbr
parents: 6091
diff changeset
1341 AC3DecodeContext *s = avctx->priv_data;
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
1342 ff_mdct_end(&s->imdct_512);
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
1343 ff_mdct_end(&s->imdct_256);
5321
fcb2a52c88fe AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents: 5320
diff changeset
1344
6538
b8f886bce6f5 only allocate context input buffer if AVCodecContext.error_reslience is greater than 0.
jbr
parents: 6537
diff changeset
1345 av_freep(&s->input_buffer);
b8f886bce6f5 only allocate context input buffer if AVCodecContext.error_reslience is greater than 0.
jbr
parents: 6537
diff changeset
1346
5304
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
1347 return 0;
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
1348 }
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
1349
5334
d406baea3275 no need for the decoder to have the license as a prefix
jbr
parents: 5333
diff changeset
1350 AVCodec ac3_decoder = {
5315
31033309ebc9 AC-3 decoder, soc revision 55, Aug 17 12:25:24 2006 UTC by cloud9
jbr
parents: 5314
diff changeset
1351 .name = "ac3",
31033309ebc9 AC-3 decoder, soc revision 55, Aug 17 12:25:24 2006 UTC by cloud9
jbr
parents: 5314
diff changeset
1352 .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
1353 .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
1354 .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
1355 .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
1356 .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
1357 .decode = ac3_decode_frame,
7769
e5f7a43f63ae create a separate codec_id for E-AC-3
jbr
parents: 7756
diff changeset
1358 .long_name = NULL_IF_CONFIG_SMALL("ATSC A/52A (AC-3)"),
5304
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
1359 };
7769
e5f7a43f63ae create a separate codec_id for E-AC-3
jbr
parents: 7756
diff changeset
1360
e5f7a43f63ae create a separate codec_id for E-AC-3
jbr
parents: 7756
diff changeset
1361 AVCodec eac3_decoder = {
e5f7a43f63ae create a separate codec_id for E-AC-3
jbr
parents: 7756
diff changeset
1362 .name = "eac3",
e5f7a43f63ae create a separate codec_id for E-AC-3
jbr
parents: 7756
diff changeset
1363 .type = CODEC_TYPE_AUDIO,
e5f7a43f63ae create a separate codec_id for E-AC-3
jbr
parents: 7756
diff changeset
1364 .id = CODEC_ID_EAC3,
e5f7a43f63ae create a separate codec_id for E-AC-3
jbr
parents: 7756
diff changeset
1365 .priv_data_size = sizeof (AC3DecodeContext),
e5f7a43f63ae create a separate codec_id for E-AC-3
jbr
parents: 7756
diff changeset
1366 .init = ac3_decode_init,
e5f7a43f63ae create a separate codec_id for E-AC-3
jbr
parents: 7756
diff changeset
1367 .close = ac3_decode_end,
e5f7a43f63ae create a separate codec_id for E-AC-3
jbr
parents: 7756
diff changeset
1368 .decode = ac3_decode_frame,
e5f7a43f63ae create a separate codec_id for E-AC-3
jbr
parents: 7756
diff changeset
1369 .long_name = NULL_IF_CONFIG_SMALL("ATSC A/52B (AC-3, E-AC-3)"),
e5f7a43f63ae create a separate codec_id for E-AC-3
jbr
parents: 7756
diff changeset
1370 };