annotate ac3dec.c @ 10463:9f35b262d3f0 libavcodec

Commit some functions that are used by both SIPR and AMR. Based on AMR SoC code by Robert Swain and Colin McQuillan.
author vitor
date Tue, 27 Oct 2009 23:53:18 +0000
parents c1c4435539e6
children 9bf0edb1aeb1
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 *
8629
04423b2f6e0b cosmetics: Remove pointless period after copyright statement non-sentences.
diego
parents: 8545
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 *
5328
5f83f09bd748 revise license header for simplicity and consistency
jbr
parents: 5326
diff changeset
10 * 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
11 *
5328
5f83f09bd748 revise license header for simplicity and consistency
jbr
parents: 5326
diff changeset
12 * FFmpeg is free software; you can redistribute it and/or
9673
3e1a08ba8481 The AC-3 decoder is now LGPL. Exchange the license header and change references
diego
parents: 9672
diff changeset
13 * modify it under the terms of the GNU Lesser General Public
5303
b8821ff5c30d AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff changeset
14 * License as published by the Free Software Foundation; either
9673
3e1a08ba8481 The AC-3 decoder is now LGPL. Exchange the license header and change references
diego
parents: 9672
diff changeset
15 * version 2.1 of the License, or (at your option) any later version.
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 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
18 * 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
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
9673
3e1a08ba8481 The AC-3 decoder is now LGPL. Exchange the license header and change references
diego
parents: 9672
diff changeset
20 * Lesser 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
21 *
9673
3e1a08ba8481 The AC-3 decoder is now LGPL. Exchange the license header and change references
diego
parents: 9672
diff changeset
22 * You should have received a copy of the GNU Lesser General Public
5328
5f83f09bd748 revise license header for simplicity and consistency
jbr
parents: 5326
diff changeset
23 * 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
24 * 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
25 */
b8821ff5c30d AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff changeset
26
b8821ff5c30d AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff changeset
27 #include <stdio.h>
b8821ff5c30d AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff changeset
28 #include <stddef.h>
b8821ff5c30d AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff changeset
29 #include <math.h>
b8821ff5c30d AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff changeset
30 #include <string.h>
b8821ff5c30d AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff changeset
31
6763
f7cbb7733146 Use full path for #includes from another directory.
diego
parents: 6712
diff changeset
32 #include "libavutil/crc.h"
8281
f93efc084e41 Make av_log_missing_feature an internal function, and change its name
stefano
parents: 8280
diff changeset
33 #include "internal.h"
8545
a5402e89a80c Factorise enum of AC3 error types to be usable by AAC in the ADTS patch that
superdump
parents: 8281
diff changeset
34 #include "aac_ac3_parser.h"
5386
d6347c3cb329 Use shared AC-3 header parsing. Move some initializations to block parsing function.
jbr
parents: 5385
diff changeset
35 #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
36 #include "ac3dec.h"
7033
f90b89217cc9 move rematrixing band table to ac3dec_data.c
jbr
parents: 7028
diff changeset
37 #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
38
7624
545305ba44a0 rename AC3_MAX_FRAME_SIZE to AC3_FRAME_BUFFER_SIZE and increase the size
jbr
parents: 7603
diff changeset
39 /** 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
40 #define AC3_FRAME_BUFFER_SIZE 32768
6536
8f2186d5daca additional protection from segmentation faults and memory access errors by
jbr
parents: 6529
diff changeset
41
7471
1788013cf23b use the same table for ungrouping exponents and bap=2 mantissas
jbr
parents: 7470
diff changeset
42 /**
1788013cf23b use the same table for ungrouping exponents and bap=2 mantissas
jbr
parents: 7470
diff changeset
43 * 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
44 * used for exponents and bap=2 mantissas
1788013cf23b use the same table for ungrouping exponents and bap=2 mantissas
jbr
parents: 7470
diff changeset
45 */
1788013cf23b use the same table for ungrouping exponents and bap=2 mantissas
jbr
parents: 7470
diff changeset
46 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
47
0d963101e0d7 AC-3 decoder, soc revision 402, Jul 14 13:45:14 2007 UTC by jbr
jbr
parents: 5324
diff changeset
48
5456
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
49 /** tables for ungrouping mantissas */
6430
de7502093922 Use 24-bit fixed-point transform coefficients until just before MDCT. This
jbr
parents: 6142
diff changeset
50 static int b1_mantissas[32][3];
de7502093922 Use 24-bit fixed-point transform coefficients until just before MDCT. This
jbr
parents: 6142
diff changeset
51 static int b2_mantissas[128][3];
de7502093922 Use 24-bit fixed-point transform coefficients until just before MDCT. This
jbr
parents: 6142
diff changeset
52 static int b3_mantissas[8];
de7502093922 Use 24-bit fixed-point transform coefficients until just before MDCT. This
jbr
parents: 6142
diff changeset
53 static int b4_mantissas[128][2];
de7502093922 Use 24-bit fixed-point transform coefficients until just before MDCT. This
jbr
parents: 6142
diff changeset
54 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
55
5456
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
56 /**
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
57 * Quantization table: levels for symmetric. bits for asymmetric.
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
58 * reference: Table 7.18 Mapping of bap to Quantizer
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
59 */
6006
ed7a232d570a cosmetics: rename ac3 decoder variables
jbr
parents: 6005
diff changeset
60 static const uint8_t quantization_tab[16] = {
5456
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
61 0, 3, 5, 7, 11, 15,
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
62 5, 6, 7, 8, 9, 10, 11, 12, 14, 16
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
63 };
5325
0d963101e0d7 AC-3 decoder, soc revision 402, Jul 14 13:45:14 2007 UTC by jbr
jbr
parents: 5324
diff changeset
64
5457
0a5849a4858b use table for converting dynamic range codes to scale factors
jbr
parents: 5456
diff changeset
65 /** dynamic range table. converts codes to scale factors. */
6006
ed7a232d570a cosmetics: rename ac3 decoder variables
jbr
parents: 6005
diff changeset
66 static float dynamic_range_tab[256];
5457
0a5849a4858b use table for converting dynamic range codes to scale factors
jbr
parents: 5456
diff changeset
67
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
68 /** Adjustments in dB gain */
7018
885cad616170 add more gain levels and adjust mix level tables accordingly.
jbr
parents: 7017
diff changeset
69 #define LEVEL_PLUS_3DB 1.4142135623730950
885cad616170 add more gain levels and adjust mix level tables accordingly.
jbr
parents: 7017
diff changeset
70 #define LEVEL_PLUS_1POINT5DB 1.1892071150027209
885cad616170 add more gain levels and adjust mix level tables accordingly.
jbr
parents: 7017
diff changeset
71 #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
72 #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
73 #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
74 #define LEVEL_MINUS_6DB 0.5000000000000000
5480
930bca6dd95f add support for downmixing to stereo or mono
jbr
parents: 5479
diff changeset
75 #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
76 #define LEVEL_ZERO 0.0000000000000000
5480
930bca6dd95f add support for downmixing to stereo or mono
jbr
parents: 5479
diff changeset
77 #define LEVEL_ONE 1.0000000000000000
930bca6dd95f add support for downmixing to stereo or mono
jbr
parents: 5479
diff changeset
78
7018
885cad616170 add more gain levels and adjust mix level tables accordingly.
jbr
parents: 7017
diff changeset
79 static const float gain_levels[9] = {
885cad616170 add more gain levels and adjust mix level tables accordingly.
jbr
parents: 7017
diff changeset
80 LEVEL_PLUS_3DB,
885cad616170 add more gain levels and adjust mix level tables accordingly.
jbr
parents: 7017
diff changeset
81 LEVEL_PLUS_1POINT5DB,
5480
930bca6dd95f add support for downmixing to stereo or mono
jbr
parents: 5479
diff changeset
82 LEVEL_ONE,
7018
885cad616170 add more gain levels and adjust mix level tables accordingly.
jbr
parents: 7017
diff changeset
83 LEVEL_MINUS_1POINT5DB,
5480
930bca6dd95f add support for downmixing to stereo or mono
jbr
parents: 5479
diff changeset
84 LEVEL_MINUS_3DB,
930bca6dd95f add support for downmixing to stereo or mono
jbr
parents: 5479
diff changeset
85 LEVEL_MINUS_4POINT5DB,
930bca6dd95f add support for downmixing to stereo or mono
jbr
parents: 5479
diff changeset
86 LEVEL_MINUS_6DB,
7018
885cad616170 add more gain levels and adjust mix level tables accordingly.
jbr
parents: 7017
diff changeset
87 LEVEL_ZERO,
5480
930bca6dd95f add support for downmixing to stereo or mono
jbr
parents: 5479
diff changeset
88 LEVEL_MINUS_9DB
930bca6dd95f add support for downmixing to stereo or mono
jbr
parents: 5479
diff changeset
89 };
930bca6dd95f add support for downmixing to stereo or mono
jbr
parents: 5479
diff changeset
90
930bca6dd95f add support for downmixing to stereo or mono
jbr
parents: 5479
diff changeset
91 /**
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
92 * 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
93 * 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
94 */
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
95 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
96
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 /**
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 * 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
99 * 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
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 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
102
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 /**
5480
930bca6dd95f add support for downmixing to stereo or mono
jbr
parents: 5479
diff changeset
104 * Table for default stereo downmixing coefficients
930bca6dd95f add support for downmixing to stereo or mono
jbr
parents: 5479
diff changeset
105 * reference: Section 7.8.2 Downmixing Into Two Channels
930bca6dd95f add support for downmixing to stereo or mono
jbr
parents: 5479
diff changeset
106 */
930bca6dd95f add support for downmixing to stereo or mono
jbr
parents: 5479
diff changeset
107 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
108 { { 2, 7 }, { 7, 2 }, },
885cad616170 add more gain levels and adjust mix level tables accordingly.
jbr
parents: 7017
diff changeset
109 { { 4, 4 }, },
885cad616170 add more gain levels and adjust mix level tables accordingly.
jbr
parents: 7017
diff changeset
110 { { 2, 7 }, { 7, 2 }, },
885cad616170 add more gain levels and adjust mix level tables accordingly.
jbr
parents: 7017
diff changeset
111 { { 2, 7 }, { 5, 5 }, { 7, 2 }, },
885cad616170 add more gain levels and adjust mix level tables accordingly.
jbr
parents: 7017
diff changeset
112 { { 2, 7 }, { 7, 2 }, { 6, 6 }, },
885cad616170 add more gain levels and adjust mix level tables accordingly.
jbr
parents: 7017
diff changeset
113 { { 2, 7 }, { 5, 5 }, { 7, 2 }, { 8, 8 }, },
885cad616170 add more gain levels and adjust mix level tables accordingly.
jbr
parents: 7017
diff changeset
114 { { 2, 7 }, { 7, 2 }, { 6, 7 }, { 7, 6 }, },
885cad616170 add more gain levels and adjust mix level tables accordingly.
jbr
parents: 7017
diff changeset
115 { { 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
116 };
5325
0d963101e0d7 AC-3 decoder, soc revision 402, Jul 14 13:45:14 2007 UTC by jbr
jbr
parents: 5324
diff changeset
117
5310
9aa9197034d7 AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents: 5309
diff changeset
118 /**
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
119 * Symmetrical Dequantization
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
120 * 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
121 * Tables 7.19 to 7.23
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
122 */
6430
de7502093922 Use 24-bit fixed-point transform coefficients until just before MDCT. This
jbr
parents: 6142
diff changeset
123 static inline int
5456
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
124 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
125 {
6430
de7502093922 Use 24-bit fixed-point transform coefficients until just before MDCT. This
jbr
parents: 6142
diff changeset
126 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
127 }
0662a270aab7 AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents: 5308
diff changeset
128
5321
fcb2a52c88fe AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents: 5320
diff changeset
129 /*
fcb2a52c88fe AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents: 5320
diff changeset
130 * 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
131 */
6517
48759bfbd073 Apply 'cold' attribute to init/uninit functions in libavcodec
zuxy
parents: 6487
diff changeset
132 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
133 {
5375
7659a1acfba4 new implementation of exponent decoding
jbr
parents: 5374
diff changeset
134 int i;
5309
0662a270aab7 AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents: 5308
diff changeset
135
7471
1788013cf23b use the same table for ungrouping exponents and bap=2 mantissas
jbr
parents: 7470
diff changeset
136 /* 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
137 reference: Section 7.1.3 Exponent Decoding */
1788013cf23b use the same table for ungrouping exponents and bap=2 mantissas
jbr
parents: 7470
diff changeset
138 for(i=0; i<128; i++) {
1788013cf23b use the same table for ungrouping exponents and bap=2 mantissas
jbr
parents: 7470
diff changeset
139 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
140 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
141 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
142 }
1788013cf23b use the same table for ungrouping exponents and bap=2 mantissas
jbr
parents: 7470
diff changeset
143
5456
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
144 /* generate grouped mantissa tables
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
145 reference: Section 7.3.5 Ungrouping of Mantissas */
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
146 for(i=0; i<32; i++) {
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
147 /* 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
148 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
149 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
150 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
151 }
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
152 for(i=0; i<128; i++) {
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
153 /* bap=2 mantissas */
7471
1788013cf23b use the same table for ungrouping exponents and bap=2 mantissas
jbr
parents: 7470
diff changeset
154 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
155 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
156 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
157
5456
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
158 /* bap=4 mantissas */
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
159 b4_mantissas[i][0] = symmetric_dequant(i / 11, 11);
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
160 b4_mantissas[i][1] = symmetric_dequant(i % 11, 11);
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
161 }
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
162 /* generate ungrouped mantissa tables
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
163 reference: Tables 7.21 and 7.23 */
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
164 for(i=0; i<7; i++) {
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
165 /* bap=3 mantissas */
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
166 b3_mantissas[i] = symmetric_dequant(i, 7);
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
167 }
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
168 for(i=0; i<15; i++) {
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
169 /* bap=5 mantissas */
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
170 b5_mantissas[i] = symmetric_dequant(i, 15);
2335f18d1b47 use floating-point mantissa dequantization tables
jbr
parents: 5455
diff changeset
171 }
5321
fcb2a52c88fe AC-3 decoder, soc revision 71, Sep 4 09:47:12 2006 UTC by cloud9
jbr
parents: 5320
diff changeset
172
5457
0a5849a4858b use table for converting dynamic range codes to scale factors
jbr
parents: 5456
diff changeset
173 /* generate dynamic range table
0a5849a4858b use table for converting dynamic range codes to scale factors
jbr
parents: 5456
diff changeset
174 reference: Section 7.7.1 Dynamic Range Control */
0a5849a4858b use table for converting dynamic range codes to scale factors
jbr
parents: 5456
diff changeset
175 for(i=0; i<256; i++) {
0a5849a4858b use table for converting dynamic range codes to scale factors
jbr
parents: 5456
diff changeset
176 int v = (i >> 5) - ((i >> 7) << 3) - 5;
6006
ed7a232d570a cosmetics: rename ac3 decoder variables
jbr
parents: 6005
diff changeset
177 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
178 }
5305
5892b4a6380b AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents: 5304
diff changeset
179 }
5892b4a6380b AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents: 5304
diff changeset
180
5304
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
181
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
182 /**
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
183 * AVCodec initialization
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
184 */
6517
48759bfbd073 Apply 'cold' attribute to init/uninit functions in libavcodec
zuxy
parents: 6487
diff changeset
185 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
186 {
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
187 AC3DecodeContext *s = avctx->priv_data;
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
188 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
189
5331
b24bcdd0ae86 move some common values to ac3.h and utilize them
jbr
parents: 5330
diff changeset
190 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
191 ac3_tables_init();
9658
67a20f0eb42c Support for getting (i)MDCT output multiplied by a constant scaling factor.
serge
parents: 9608
diff changeset
192 ff_mdct_init(&s->imdct_256, 8, 1, 1.0);
67a20f0eb42c Support for getting (i)MDCT output multiplied by a constant scaling factor.
serge
parents: 9608
diff changeset
193 ff_mdct_init(&s->imdct_512, 9, 1, 1.0);
6142
a35b838ab955 Add variable alpha and size of half window for Kaiser-Bessel Derived window
superdump
parents: 6139
diff changeset
194 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
195 dsputil_init(&s->dsp, avctx);
7601
69d5f318275f use LFG instead of Mersenne Twister for AC-3 PRNG
jbr
parents: 7594
diff changeset
196 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
197
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
198 /* set bias values for float to int16 conversion */
7550
f9e4afa46993 use float_to_int16_interleave in ac3
lorenm
parents: 7549
diff changeset
199 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
200 s->add_bias = 385.0f;
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
201 s->mul_bias = 1.0f;
5479
943c732c905d use dsputil for float to signed 16-bit sample conversion
jbr
parents: 5477
diff changeset
202 } else {
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
203 s->add_bias = 0.0f;
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
204 s->mul_bias = 32767.0f;
5479
943c732c905d use dsputil for float to signed 16-bit sample conversion
jbr
parents: 5477
diff changeset
205 }
943c732c905d use dsputil for float to signed 16-bit sample conversion
jbr
parents: 5477
diff changeset
206
6112
1e77145f9c74 check for request_channels at codec init
jbr
parents: 6108
diff changeset
207 /* allow downmixing to stereo or mono */
1e77145f9c74 check for request_channels at codec init
jbr
parents: 6108
diff changeset
208 if (avctx->channels > 0 && avctx->request_channels > 0 &&
1e77145f9c74 check for request_channels at codec init
jbr
parents: 6108
diff changeset
209 avctx->request_channels < avctx->channels &&
1e77145f9c74 check for request_channels at codec init
jbr
parents: 6108
diff changeset
210 avctx->request_channels <= 2) {
1e77145f9c74 check for request_channels at codec init
jbr
parents: 6108
diff changeset
211 avctx->channels = avctx->request_channels;
1e77145f9c74 check for request_channels at codec init
jbr
parents: 6108
diff changeset
212 }
6480
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
213 s->downmixed = 1;
6112
1e77145f9c74 check for request_channels at codec init
jbr
parents: 6108
diff changeset
214
6538
b8f886bce6f5 only allocate context input buffer if AVCodecContext.error_reslience is greater than 0.
jbr
parents: 6537
diff changeset
215 /* allocate context input buffer */
7831
8195c970d077 Rename error_resilience to error_recognition.
michael
parents: 7769
diff changeset
216 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
217 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
218 if (!s->input_buffer)
b8f886bce6f5 only allocate context input buffer if AVCodecContext.error_reslience is greater than 0.
jbr
parents: 6537
diff changeset
219 return AVERROR_NOMEM;
b8f886bce6f5 only allocate context input buffer if AVCodecContext.error_reslience is greater than 0.
jbr
parents: 6537
diff changeset
220 }
b8f886bce6f5 only allocate context input buffer if AVCodecContext.error_reslience is greater than 0.
jbr
parents: 6537
diff changeset
221
7451
85ab7655ad4d Modify all codecs to report their supported input and output sample format(s).
pross
parents: 7328
diff changeset
222 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
223 return 0;
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
224 }
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
225
5386
d6347c3cb329 Use shared AC-3 header parsing. Move some initializations to block parsing function.
jbr
parents: 5385
diff changeset
226 /**
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
227 * 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
228 * GetBitContext within AC3DecodeContext must point to
7470
1a93d3bbe3ee cosmetics: make all references to AC-3 capitalized and hyphenated
jbr
parents: 7451
diff changeset
229 * 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
230 */
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
231 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
232 {
7028
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
233 GetBitContext *gbc = &s->gbc;
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
234 int i;
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
235
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
236 /* read the rest of the bsi. read twice for dual mono mode. */
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
237 i = !(s->channel_mode);
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
238 do {
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
239 skip_bits(gbc, 5); // skip dialog normalization
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
240 if (get_bits1(gbc))
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
241 skip_bits(gbc, 8); //skip compression
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
242 if (get_bits1(gbc))
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
243 skip_bits(gbc, 8); //skip language code
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, 7); //skip audio production information
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
246 } while (i--);
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
247
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
248 skip_bits(gbc, 2); //skip copyright bit and original bitstream bit
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
249
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
250 /* skip the timecodes (or extra bitstream information for Alternate Syntax)
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
251 TODO: read & use the xbsi1 downmix levels */
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
252 if (get_bits1(gbc))
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
253 skip_bits(gbc, 14); //skip timecode1 / xbsi1
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
254 if (get_bits1(gbc))
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
255 skip_bits(gbc, 14); //skip timecode2 / xbsi2
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
256
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
257 /* skip additional bitstream info */
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 i = get_bits(gbc, 6);
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
260 do {
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
261 skip_bits(gbc, 8);
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
262 } while(i--);
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
263 }
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
264
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
265 return 0;
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
266 }
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
267
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
268 /**
7470
1a93d3bbe3ee cosmetics: make all references to AC-3 capitalized and hyphenated
jbr
parents: 7451
diff changeset
269 * Common function to parse AC-3 or E-AC-3 frame header
7028
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
270 */
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
271 static int parse_frame_header(AC3DecodeContext *s)
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
272 {
5386
d6347c3cb329 Use shared AC-3 header parsing. Move some initializations to block parsing function.
jbr
parents: 5385
diff changeset
273 AC3HeaderInfo hdr;
7028
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
274 int err;
5309
0662a270aab7 AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents: 5308
diff changeset
275
7489
f6260f8362f6 remove unneeded local variable
jbr
parents: 7473
diff changeset
276 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
277 if(err)
d6347c3cb329 Use shared AC-3 header parsing. Move some initializations to block parsing function.
jbr
parents: 5385
diff changeset
278 return err;
5305
5892b4a6380b AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents: 5304
diff changeset
279
5386
d6347c3cb329 Use shared AC-3 header parsing. Move some initializations to block parsing function.
jbr
parents: 5385
diff changeset
280 /* get decoding parameters from header info */
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
281 s->bit_alloc_params.sr_code = hdr.sr_code;
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
282 s->channel_mode = hdr.channel_mode;
9512
ba5d9a97ab2f Add channel layout support to the AC-3 decoder and AC-3 parser.
jbr
parents: 9454
diff changeset
283 s->channel_layout = hdr.channel_layout;
6091
c365f7b83133 cosmetics: vertical realignment after last commit
jbr
parents: 6090
diff changeset
284 s->lfe_on = hdr.lfe_on;
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
285 s->bit_alloc_params.sr_shift = hdr.sr_shift;
6093
5562b898db5b cosmetics: rename sampling_rate to sample_rate
jbr
parents: 6092
diff changeset
286 s->sample_rate = hdr.sample_rate;
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
287 s->bit_rate = hdr.bit_rate;
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
288 s->channels = hdr.channels;
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
289 s->fbw_channels = s->channels - s->lfe_on;
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
290 s->lfe_ch = s->fbw_channels + 1;
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
291 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
292 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
293 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
294 s->num_blocks = hdr.num_blocks;
7013
d07912ff7dcd read frame type from header info into decode context
jbr
parents: 7012
diff changeset
295 s->frame_type = hdr.frame_type;
7012
4156c54aedba get substreamid from ac3 parser
jbr
parents: 7011
diff changeset
296 s->substreamid = hdr.substreamid;
5412
3f6a6dda6b2d remove broken downmixing. will add new implementation later.
jbr
parents: 5393
diff changeset
297
6958
1c523b5212cd set lfe params at frame init instead of in every block
jbr
parents: 6957
diff changeset
298 if(s->lfe_on) {
1c523b5212cd set lfe params at frame init instead of in every block
jbr
parents: 6957
diff changeset
299 s->start_freq[s->lfe_ch] = 0;
1c523b5212cd set lfe params at frame init instead of in every block
jbr
parents: 6957
diff changeset
300 s->end_freq[s->lfe_ch] = 7;
1c523b5212cd set lfe params at frame init instead of in every block
jbr
parents: 6957
diff changeset
301 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
302 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
303 }
1c523b5212cd set lfe params at frame init instead of in every block
jbr
parents: 6957
diff changeset
304
7626
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
305 if (hdr.bitstream_id <= 10) {
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
306 s->eac3 = 0;
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
307 s->snr_offset_strategy = 2;
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
308 s->block_switch_syntax = 1;
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
309 s->dither_flag_syntax = 1;
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
310 s->bit_allocation_syntax = 1;
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
311 s->fast_gain_syntax = 0;
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
312 s->first_cpl_leak = 0;
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
313 s->dba_syntax = 1;
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
314 s->skip_syntax = 1;
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
315 memset(s->channel_uses_aht, 0, sizeof(s->channel_uses_aht));
7627
93c5703328d6 cosmetics: indentation
jbr
parents: 7626
diff changeset
316 return ac3_parse_header(s);
9983
68de5143aa45 refactoring: properly separate AC-3 and E-AC-3 code
diego
parents: 9982
diff changeset
317 } else if (CONFIG_EAC3_DECODER) {
7756
2994fe74068f turn on E-AC-3 decoding support and update the Changelog
jbr
parents: 7749
diff changeset
318 s->eac3 = 1;
2994fe74068f turn on E-AC-3 decoding support and update the Changelog
jbr
parents: 7749
diff changeset
319 return ff_eac3_parse_header(s);
9983
68de5143aa45 refactoring: properly separate AC-3 and E-AC-3 code
diego
parents: 9982
diff changeset
320 } else {
68de5143aa45 refactoring: properly separate AC-3 and E-AC-3 code
diego
parents: 9982
diff changeset
321 av_log(s->avctx, AV_LOG_ERROR, "E-AC-3 support not compiled in\n");
68de5143aa45 refactoring: properly separate AC-3 and E-AC-3 code
diego
parents: 9982
diff changeset
322 return -1;
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 {
10295
916c2b7ecd02 Move variable declaration to inside of loop.
jbr
parents: 10294
diff changeset
415 int bin, band, ch;
5451
19bb5e64a57c split out coupling coefficient reconstruction into a separate function
jbr
parents: 5435
diff changeset
416
10294
a8514d4fa525 Cosmetics: Rename some variables.
jbr
parents: 10293
diff changeset
417 bin = s->start_freq[CPL_CH];
a8514d4fa525 Cosmetics: Rename some variables.
jbr
parents: 10293
diff changeset
418 for (band = 0; band < s->num_cpl_bands; band++) {
10297
12d40dab6d80 Rearrange loop structure for approx. 35-50% faster calc_transform_coeffs_cpl()
jbr
parents: 10295
diff changeset
419 int band_start = bin;
10295
916c2b7ecd02 Move variable declaration to inside of loop.
jbr
parents: 10294
diff changeset
420 int band_end = bin + s->cpl_band_sizes[band];
10297
12d40dab6d80 Rearrange loop structure for approx. 35-50% faster calc_transform_coeffs_cpl()
jbr
parents: 10295
diff changeset
421 for (ch = 1; ch <= s->fbw_channels; ch++) {
12d40dab6d80 Rearrange loop structure for approx. 35-50% faster calc_transform_coeffs_cpl()
jbr
parents: 10295
diff changeset
422 if (s->channel_in_cpl[ch]) {
12d40dab6d80 Rearrange loop structure for approx. 35-50% faster calc_transform_coeffs_cpl()
jbr
parents: 10295
diff changeset
423 int64_t cpl_coord = s->cpl_coords[ch][band];
12d40dab6d80 Rearrange loop structure for approx. 35-50% faster calc_transform_coeffs_cpl()
jbr
parents: 10295
diff changeset
424 for (bin = band_start; bin < band_end; bin++) {
10294
a8514d4fa525 Cosmetics: Rename some variables.
jbr
parents: 10293
diff changeset
425 s->fixed_coeffs[ch][bin] = ((int64_t)s->fixed_coeffs[CPL_CH][bin] *
10297
12d40dab6d80 Rearrange loop structure for approx. 35-50% faster calc_transform_coeffs_cpl()
jbr
parents: 10295
diff changeset
426 cpl_coord) >> 23;
12d40dab6d80 Rearrange loop structure for approx. 35-50% faster calc_transform_coeffs_cpl()
jbr
parents: 10295
diff changeset
427 }
12d40dab6d80 Rearrange loop structure for approx. 35-50% faster calc_transform_coeffs_cpl()
jbr
parents: 10295
diff changeset
428 if (ch == 2 && s->phase_flags[band]) {
12d40dab6d80 Rearrange loop structure for approx. 35-50% faster calc_transform_coeffs_cpl()
jbr
parents: 10295
diff changeset
429 for (bin = band_start; bin < band_end; bin++)
12d40dab6d80 Rearrange loop structure for approx. 35-50% faster calc_transform_coeffs_cpl()
jbr
parents: 10295
diff changeset
430 s->fixed_coeffs[2][bin] = -s->fixed_coeffs[2][bin];
5451
19bb5e64a57c split out coupling coefficient reconstruction into a separate function
jbr
parents: 5435
diff changeset
431 }
10024
9ff48c350a32 cosmetics: indentation and line wrap
jbr
parents: 10023
diff changeset
432 }
10021
f6c433eacc5a Use coupling band sizes instead of coupling band structure when
jbr
parents: 10016
diff changeset
433 }
10297
12d40dab6d80 Rearrange loop structure for approx. 35-50% faster calc_transform_coeffs_cpl()
jbr
parents: 10295
diff changeset
434 bin = band_end;
5451
19bb5e64a57c split out coupling coefficient reconstruction into a separate function
jbr
parents: 5435
diff changeset
435 }
19bb5e64a57c split out coupling coefficient reconstruction into a separate function
jbr
parents: 5435
diff changeset
436 }
19bb5e64a57c split out coupling coefficient reconstruction into a separate function
jbr
parents: 5435
diff changeset
437
5515
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 * 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
440 */
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
441 typedef struct {
9672
15276eb66180 LGPL version of ac3_decode_transform_coeffs_ch, ~12.4% faster.
darkshikari
parents: 9661
diff changeset
442 int b1_mant[2];
15276eb66180 LGPL version of ac3_decode_transform_coeffs_ch, ~12.4% faster.
darkshikari
parents: 9661
diff changeset
443 int b2_mant[2];
15276eb66180 LGPL version of ac3_decode_transform_coeffs_ch, ~12.4% faster.
darkshikari
parents: 9661
diff changeset
444 int b4_mant;
15276eb66180 LGPL version of ac3_decode_transform_coeffs_ch, ~12.4% faster.
darkshikari
parents: 9661
diff changeset
445 int b1;
15276eb66180 LGPL version of ac3_decode_transform_coeffs_ch, ~12.4% faster.
darkshikari
parents: 9661
diff changeset
446 int b2;
15276eb66180 LGPL version of ac3_decode_transform_coeffs_ch, ~12.4% faster.
darkshikari
parents: 9661
diff changeset
447 int b4;
5306
abc5c130b448 AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents: 5305
diff changeset
448 } mant_groups;
abc5c130b448 AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents: 5305
diff changeset
449
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
450 /**
7719
0f7cdf663356 cosmetics: change another "get" to "decode"
jbr
parents: 7718
diff changeset
451 * Decode the transform coefficients for a particular channel
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
452 * reference: Section 7.3 Quantization and Decoding of Mantissas
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
453 */
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
454 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
455 {
9672
15276eb66180 LGPL version of ac3_decode_transform_coeffs_ch, ~12.4% faster.
darkshikari
parents: 9661
diff changeset
456 int start_freq = s->start_freq[ch_index];
15276eb66180 LGPL version of ac3_decode_transform_coeffs_ch, ~12.4% faster.
darkshikari
parents: 9661
diff changeset
457 int end_freq = s->end_freq[ch_index];
15276eb66180 LGPL version of ac3_decode_transform_coeffs_ch, ~12.4% faster.
darkshikari
parents: 9661
diff changeset
458 uint8_t *baps = s->bap[ch_index];
15276eb66180 LGPL version of ac3_decode_transform_coeffs_ch, ~12.4% faster.
darkshikari
parents: 9661
diff changeset
459 int8_t *exps = s->dexps[ch_index];
15276eb66180 LGPL version of ac3_decode_transform_coeffs_ch, ~12.4% faster.
darkshikari
parents: 9661
diff changeset
460 int *coeffs = s->fixed_coeffs[ch_index];
10025
3fccd61e69d1 ac3dec: simplify zero-bit mantissa dithering by calculating it
jbr
parents: 10024
diff changeset
461 int dither = (ch_index == CPL_CH) || s->dither_flag[ch_index];
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
462 GetBitContext *gbc = &s->gbc;
9672
15276eb66180 LGPL version of ac3_decode_transform_coeffs_ch, ~12.4% faster.
darkshikari
parents: 9661
diff changeset
463 int freq;
5303
b8821ff5c30d AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff changeset
464
9672
15276eb66180 LGPL version of ac3_decode_transform_coeffs_ch, ~12.4% faster.
darkshikari
parents: 9661
diff changeset
465 for(freq = start_freq; freq < end_freq; freq++){
15276eb66180 LGPL version of ac3_decode_transform_coeffs_ch, ~12.4% faster.
darkshikari
parents: 9661
diff changeset
466 int bap = baps[freq];
15276eb66180 LGPL version of ac3_decode_transform_coeffs_ch, ~12.4% faster.
darkshikari
parents: 9661
diff changeset
467 int mantissa;
15276eb66180 LGPL version of ac3_decode_transform_coeffs_ch, ~12.4% faster.
darkshikari
parents: 9661
diff changeset
468 switch(bap){
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:
10025
3fccd61e69d1 ac3dec: simplify zero-bit mantissa dithering by calculating it
jbr
parents: 10024
diff changeset
470 if (dither)
10026
e73210411a21 cosmetics: reindent after last commit
jbr
parents: 10025
diff changeset
471 mantissa = (av_lfg_get(&s->dith_state) & 0x7FFFFF) - 0x400000;
10025
3fccd61e69d1 ac3dec: simplify zero-bit mantissa dithering by calculating it
jbr
parents: 10024
diff changeset
472 else
3fccd61e69d1 ac3dec: simplify zero-bit mantissa dithering by calculating it
jbr
parents: 10024
diff changeset
473 mantissa = 0;
5453
d3a265cd395c simplify coefficient decoding
jbr
parents: 5452
diff changeset
474 break;
5304
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
475 case 1:
9672
15276eb66180 LGPL version of ac3_decode_transform_coeffs_ch, ~12.4% faster.
darkshikari
parents: 9661
diff changeset
476 if(m->b1){
15276eb66180 LGPL version of ac3_decode_transform_coeffs_ch, ~12.4% faster.
darkshikari
parents: 9661
diff changeset
477 m->b1--;
15276eb66180 LGPL version of ac3_decode_transform_coeffs_ch, ~12.4% faster.
darkshikari
parents: 9661
diff changeset
478 mantissa = m->b1_mant[m->b1];
5304
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
479 }
9672
15276eb66180 LGPL version of ac3_decode_transform_coeffs_ch, ~12.4% faster.
darkshikari
parents: 9661
diff changeset
480 else{
15276eb66180 LGPL version of ac3_decode_transform_coeffs_ch, ~12.4% faster.
darkshikari
parents: 9661
diff changeset
481 int bits = get_bits(gbc, 5);
15276eb66180 LGPL version of ac3_decode_transform_coeffs_ch, ~12.4% faster.
darkshikari
parents: 9661
diff changeset
482 mantissa = b1_mantissas[bits][0];
15276eb66180 LGPL version of ac3_decode_transform_coeffs_ch, ~12.4% faster.
darkshikari
parents: 9661
diff changeset
483 m->b1_mant[1] = b1_mantissas[bits][1];
15276eb66180 LGPL version of ac3_decode_transform_coeffs_ch, ~12.4% faster.
darkshikari
parents: 9661
diff changeset
484 m->b1_mant[0] = b1_mantissas[bits][2];
15276eb66180 LGPL version of ac3_decode_transform_coeffs_ch, ~12.4% faster.
darkshikari
parents: 9661
diff changeset
485 m->b1 = 2;
15276eb66180 LGPL version of ac3_decode_transform_coeffs_ch, ~12.4% faster.
darkshikari
parents: 9661
diff changeset
486 }
5453
d3a265cd395c simplify coefficient decoding
jbr
parents: 5452
diff changeset
487 break;
5304
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
488 case 2:
9672
15276eb66180 LGPL version of ac3_decode_transform_coeffs_ch, ~12.4% faster.
darkshikari
parents: 9661
diff changeset
489 if(m->b2){
15276eb66180 LGPL version of ac3_decode_transform_coeffs_ch, ~12.4% faster.
darkshikari
parents: 9661
diff changeset
490 m->b2--;
15276eb66180 LGPL version of ac3_decode_transform_coeffs_ch, ~12.4% faster.
darkshikari
parents: 9661
diff changeset
491 mantissa = m->b2_mant[m->b2];
5304
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
492 }
9672
15276eb66180 LGPL version of ac3_decode_transform_coeffs_ch, ~12.4% faster.
darkshikari
parents: 9661
diff changeset
493 else{
15276eb66180 LGPL version of ac3_decode_transform_coeffs_ch, ~12.4% faster.
darkshikari
parents: 9661
diff changeset
494 int bits = get_bits(gbc, 7);
15276eb66180 LGPL version of ac3_decode_transform_coeffs_ch, ~12.4% faster.
darkshikari
parents: 9661
diff changeset
495 mantissa = b2_mantissas[bits][0];
15276eb66180 LGPL version of ac3_decode_transform_coeffs_ch, ~12.4% faster.
darkshikari
parents: 9661
diff changeset
496 m->b2_mant[1] = b2_mantissas[bits][1];
15276eb66180 LGPL version of ac3_decode_transform_coeffs_ch, ~12.4% faster.
darkshikari
parents: 9661
diff changeset
497 m->b2_mant[0] = b2_mantissas[bits][2];
15276eb66180 LGPL version of ac3_decode_transform_coeffs_ch, ~12.4% faster.
darkshikari
parents: 9661
diff changeset
498 m->b2 = 2;
15276eb66180 LGPL version of ac3_decode_transform_coeffs_ch, ~12.4% faster.
darkshikari
parents: 9661
diff changeset
499 }
5453
d3a265cd395c simplify coefficient decoding
jbr
parents: 5452
diff changeset
500 break;
5304
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
501 case 3:
9672
15276eb66180 LGPL version of ac3_decode_transform_coeffs_ch, ~12.4% faster.
darkshikari
parents: 9661
diff changeset
502 mantissa = b3_mantissas[get_bits(gbc, 3)];
5453
d3a265cd395c simplify coefficient decoding
jbr
parents: 5452
diff changeset
503 break;
5304
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
504 case 4:
9672
15276eb66180 LGPL version of ac3_decode_transform_coeffs_ch, ~12.4% faster.
darkshikari
parents: 9661
diff changeset
505 if(m->b4){
15276eb66180 LGPL version of ac3_decode_transform_coeffs_ch, ~12.4% faster.
darkshikari
parents: 9661
diff changeset
506 m->b4 = 0;
15276eb66180 LGPL version of ac3_decode_transform_coeffs_ch, ~12.4% faster.
darkshikari
parents: 9661
diff changeset
507 mantissa = m->b4_mant;
5304
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
508 }
9672
15276eb66180 LGPL version of ac3_decode_transform_coeffs_ch, ~12.4% faster.
darkshikari
parents: 9661
diff changeset
509 else{
15276eb66180 LGPL version of ac3_decode_transform_coeffs_ch, ~12.4% faster.
darkshikari
parents: 9661
diff changeset
510 int bits = get_bits(gbc, 7);
15276eb66180 LGPL version of ac3_decode_transform_coeffs_ch, ~12.4% faster.
darkshikari
parents: 9661
diff changeset
511 mantissa = b4_mantissas[bits][0];
15276eb66180 LGPL version of ac3_decode_transform_coeffs_ch, ~12.4% faster.
darkshikari
parents: 9661
diff changeset
512 m->b4_mant = b4_mantissas[bits][1];
15276eb66180 LGPL version of ac3_decode_transform_coeffs_ch, ~12.4% faster.
darkshikari
parents: 9661
diff changeset
513 m->b4 = 1;
15276eb66180 LGPL version of ac3_decode_transform_coeffs_ch, ~12.4% faster.
darkshikari
parents: 9661
diff changeset
514 }
5453
d3a265cd395c simplify coefficient decoding
jbr
parents: 5452
diff changeset
515 break;
5304
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
516 case 5:
9672
15276eb66180 LGPL version of ac3_decode_transform_coeffs_ch, ~12.4% faster.
darkshikari
parents: 9661
diff changeset
517 mantissa = b5_mantissas[get_bits(gbc, 4)];
5453
d3a265cd395c simplify coefficient decoding
jbr
parents: 5452
diff changeset
518 break;
9672
15276eb66180 LGPL version of ac3_decode_transform_coeffs_ch, ~12.4% faster.
darkshikari
parents: 9661
diff changeset
519 default: /* 6 to 15 */
15276eb66180 LGPL version of ac3_decode_transform_coeffs_ch, ~12.4% faster.
darkshikari
parents: 9661
diff changeset
520 mantissa = get_bits(gbc, quantization_tab[bap]);
15276eb66180 LGPL version of ac3_decode_transform_coeffs_ch, ~12.4% faster.
darkshikari
parents: 9661
diff changeset
521 /* Shift mantissa and sign-extend it. */
15276eb66180 LGPL version of ac3_decode_transform_coeffs_ch, ~12.4% faster.
darkshikari
parents: 9661
diff changeset
522 mantissa = (mantissa << (32-quantization_tab[bap]))>>8;
5453
d3a265cd395c simplify coefficient decoding
jbr
parents: 5452
diff changeset
523 break;
5304
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
524 }
9672
15276eb66180 LGPL version of ac3_decode_transform_coeffs_ch, ~12.4% faster.
darkshikari
parents: 9661
diff changeset
525 coeffs[freq] = mantissa >> exps[freq];
5303
b8821ff5c30d AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff changeset
526 }
b8821ff5c30d AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff changeset
527 }
b8821ff5c30d AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff changeset
528
5454
5b497d971546 dither zero-bit mantissas by default. remove dithering only if it's explicitly turned off.
jbr
parents: 5453
diff changeset
529 /**
10025
3fccd61e69d1 ac3dec: simplify zero-bit mantissa dithering by calculating it
jbr
parents: 10024
diff changeset
530 * Remove random dithering from coupling range coefficients with zero-bit
3fccd61e69d1 ac3dec: simplify zero-bit mantissa dithering by calculating it
jbr
parents: 10024
diff changeset
531 * mantissas for coupled channels which do not use dithering.
5454
5b497d971546 dither zero-bit mantissas by default. remove dithering only if it's explicitly turned off.
jbr
parents: 5453
diff changeset
532 * 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
533 */
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
534 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
535 int ch, i;
5b497d971546 dither zero-bit mantissas by default. remove dithering only if it's explicitly turned off.
jbr
parents: 5453
diff changeset
536
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
537 for(ch=1; ch<=s->fbw_channels; ch++) {
10025
3fccd61e69d1 ac3dec: simplify zero-bit mantissa dithering by calculating it
jbr
parents: 10024
diff changeset
538 if(!s->dither_flag[ch] && s->channel_in_cpl[ch]) {
3fccd61e69d1 ac3dec: simplify zero-bit mantissa dithering by calculating it
jbr
parents: 10024
diff changeset
539 for(i = s->start_freq[CPL_CH]; i<s->end_freq[CPL_CH]; i++) {
3fccd61e69d1 ac3dec: simplify zero-bit mantissa dithering by calculating it
jbr
parents: 10024
diff changeset
540 if(!s->bap[CPL_CH][i])
3fccd61e69d1 ac3dec: simplify zero-bit mantissa dithering by calculating it
jbr
parents: 10024
diff changeset
541 s->fixed_coeffs[ch][i] = 0;
5454
5b497d971546 dither zero-bit mantissas by default. remove dithering only if it's explicitly turned off.
jbr
parents: 5453
diff changeset
542 }
5b497d971546 dither zero-bit mantissas by default. remove dithering only if it's explicitly turned off.
jbr
parents: 5453
diff changeset
543 }
5b497d971546 dither zero-bit mantissas by default. remove dithering only if it's explicitly turned off.
jbr
parents: 5453
diff changeset
544 }
5b497d971546 dither zero-bit mantissas by default. remove dithering only if it's explicitly turned off.
jbr
parents: 5453
diff changeset
545 }
5b497d971546 dither zero-bit mantissas by default. remove dithering only if it's explicitly turned off.
jbr
parents: 5453
diff changeset
546
7701
20b27ee9b40f cosmetics: rename some functions from *get_* to *decode_*
jbr
parents: 7667
diff changeset
547 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
548 mant_groups *m)
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
549 {
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
550 if (!s->channel_uses_aht[ch]) {
7701
20b27ee9b40f cosmetics: rename some functions from *get_* to *decode_*
jbr
parents: 7667
diff changeset
551 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
552 } else {
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
553 /* 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
554 block of the frame. */
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
555 int bin;
9983
68de5143aa45 refactoring: properly separate AC-3 and E-AC-3 code
diego
parents: 9982
diff changeset
556 if (!blk && CONFIG_EAC3_DECODER)
7701
20b27ee9b40f cosmetics: rename some functions from *get_* to *decode_*
jbr
parents: 7667
diff changeset
557 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
558 for (bin = s->start_freq[ch]; bin < s->end_freq[ch]; bin++) {
9680
debe2623a70a eac3dec: revert commit r18860. keep the AHT IDCT 24-bit. will make AHT GAQ
jbr
parents: 9673
diff changeset
559 s->fixed_coeffs[ch][bin] = s->pre_mantissa[ch][bin][blk] >> s->dexps[ch][bin];
7626
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
560 }
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
561 }
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
562 }
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
563
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
564 /**
7718
61e12905c9af cosmetics: change "get" to "decode"
jbr
parents: 7717
diff changeset
565 * 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
566 */
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
567 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
568 {
5476
e50f0d583a36 consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents: 5475
diff changeset
569 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
570 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
571 mant_groups m;
abc5c130b448 AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents: 5305
diff changeset
572
9672
15276eb66180 LGPL version of ac3_decode_transform_coeffs_ch, ~12.4% faster.
darkshikari
parents: 9661
diff changeset
573 m.b1 = m.b2 = m.b4 = 0;
5303
b8821ff5c30d AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff changeset
574
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
575 for (ch = 1; ch <= s->channels; ch++) {
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
576 /* 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
577 decode_transform_coeffs_ch(s, blk, ch, &m);
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
578 /* tranform coefficients for coupling channel come right after the
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
579 coefficients for the first coupled channel*/
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
580 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
581 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
582 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
583 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
584 got_cplchan = 1;
abc5c130b448 AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents: 5305
diff changeset
585 }
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
586 end = s->end_freq[CPL_CH];
5461
c427d8950769 cosmetics: use braces when it makes the code easier to read.
jbr
parents: 5460
diff changeset
587 } else {
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
588 end = s->end_freq[ch];
5461
c427d8950769 cosmetics: use braces when it makes the code easier to read.
jbr
parents: 5460
diff changeset
589 }
5306
abc5c130b448 AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents: 5305
diff changeset
590 do
6906
86e3dce7f723 zero the upper frequencies of the correct coefficients
jbr
parents: 6889
diff changeset
591 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
592 while(++end < 256);
abc5c130b448 AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents: 5305
diff changeset
593 }
5303
b8821ff5c30d AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff changeset
594
7740
023851dde8c7 cosmetics: update comment about dithering
jbr
parents: 7719
diff changeset
595 /* zero the dithered coefficients for appropriate channels */
7717
a781fc312ccc cosmetics: indentation
jbr
parents: 7716
diff changeset
596 remove_dithering(s);
5303
b8821ff5c30d AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff changeset
597 }
b8821ff5c30d AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff changeset
598
5415
8bf7358978c8 simplify stereo rematrixing
jbr
parents: 5414
diff changeset
599 /**
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
600 * Stereo rematrixing.
5415
8bf7358978c8 simplify stereo rematrixing
jbr
parents: 5414
diff changeset
601 * reference: Section 7.5.4 Rematrixing : Decoding Technique
8bf7358978c8 simplify stereo rematrixing
jbr
parents: 5414
diff changeset
602 */
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
603 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
604 {
5415
8bf7358978c8 simplify stereo rematrixing
jbr
parents: 5414
diff changeset
605 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
606 int end, bndend;
5304
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
607
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
608 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
609
10322
6bca3f74d77d remove unneeded assignment in inner loop. rematrixing bands are contiguous.
jbr
parents: 10297
diff changeset
610 i = ff_ac3_rematrix_band_tab[0];
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
611 for(bnd=0; bnd<s->num_rematrixing_bands; bnd++) {
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
612 if(s->rematrixing_flags[bnd]) {
7033
f90b89217cc9 move rematrixing band table to ac3dec_data.c
jbr
parents: 7028
diff changeset
613 bndend = FFMIN(end, ff_ac3_rematrix_band_tab[bnd+1]);
10322
6bca3f74d77d remove unneeded assignment in inner loop. rematrixing bands are contiguous.
jbr
parents: 10297
diff changeset
614 for(; i<bndend; i++) {
10323
1f5c4d2ce77f Simplify stereo rematrixing by only using one temporary variable. It is also
jbr
parents: 10322
diff changeset
615 int tmp0 = s->fixed_coeffs[1][i];
10331
b5b58febcf68 10l: wrong operation in stereo rematrixing
jbr
parents: 10323
diff changeset
616 s->fixed_coeffs[1][i] += s->fixed_coeffs[2][i];
10323
1f5c4d2ce77f Simplify stereo rematrixing by only using one temporary variable. It is also
jbr
parents: 10322
diff changeset
617 s->fixed_coeffs[2][i] = tmp0 - s->fixed_coeffs[2][i];
5415
8bf7358978c8 simplify stereo rematrixing
jbr
parents: 5414
diff changeset
618 }
8bf7358978c8 simplify stereo rematrixing
jbr
parents: 5414
diff changeset
619 }
5304
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
620 }
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
621 }
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
622
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
623 /**
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
624 * Inverse MDCT Transform.
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
625 * Convert frequency domain coefficients to time-domain audio samples.
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
626 * reference: Section 7.9.4 Transformation Equations
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
627 */
6480
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
628 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
629 {
5336
cc3f5a28aa2a fix the 256-point MDCT
jbr
parents: 5335
diff changeset
630 int ch;
7561
be6d31643128 oops, non-normalized downmix to mono contaminated add_bias for non-simd float-to-int.
lorenm
parents: 7554
diff changeset
631 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
632 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
633 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
634
6006
ed7a232d570a cosmetics: rename ac3 decoder variables
jbr
parents: 6005
diff changeset
635 for (ch=1; ch<=channels; ch++) {
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
636 if (s->block_switch[ch]) {
7549
60b5c1e5a7ee use imdct_half in ac3
lorenm
parents: 7547
diff changeset
637 int i;
60b5c1e5a7ee use imdct_half in ac3
lorenm
parents: 7547
diff changeset
638 float *x = s->tmp_output+128;
60b5c1e5a7ee use imdct_half in ac3
lorenm
parents: 7547
diff changeset
639 for(i=0; i<128; i++)
60b5c1e5a7ee use imdct_half in ac3
lorenm
parents: 7547
diff changeset
640 x[i] = s->transform_coeffs[ch][2*i];
60b5c1e5a7ee use imdct_half in ac3
lorenm
parents: 7547
diff changeset
641 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
642 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
643 for(i=0; i<128; i++)
60b5c1e5a7ee use imdct_half in ac3
lorenm
parents: 7547
diff changeset
644 x[i] = s->transform_coeffs[ch][2*i+1];
60b5c1e5a7ee use imdct_half in ac3
lorenm
parents: 7547
diff changeset
645 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
646 } else {
7549
60b5c1e5a7ee use imdct_half in ac3
lorenm
parents: 7547
diff changeset
647 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
648 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
649 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
650 }
5306
abc5c130b448 AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents: 5305
diff changeset
651 }
abc5c130b448 AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents: 5305
diff changeset
652 }
abc5c130b448 AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents: 5305
diff changeset
653
5480
930bca6dd95f add support for downmixing to stereo or mono
jbr
parents: 5479
diff changeset
654 /**
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
655 * Downmix the output to mono or stereo.
5480
930bca6dd95f add support for downmixing to stereo or mono
jbr
parents: 5479
diff changeset
656 */
7563
8390efaa0c03 simd downmix
lorenm
parents: 7562
diff changeset
657 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
658 {
930bca6dd95f add support for downmixing to stereo or mono
jbr
parents: 5479
diff changeset
659 int i, j;
6431
305c49259b59 pre-calculate downmix coefficient sums. 2% faster 5.1-to-stereo downmixing.
jbr
parents: 6430
diff changeset
660 float v0, v1;
7563
8390efaa0c03 simd downmix
lorenm
parents: 7562
diff changeset
661 if(out_ch == 2) {
8390efaa0c03 simd downmix
lorenm
parents: 7562
diff changeset
662 for(i=0; i<len; i++) {
7554
96d57e3b78e5 optimize ac3_downmix.
lorenm
parents: 7550
diff changeset
663 v0 = v1 = 0.0f;
7563
8390efaa0c03 simd downmix
lorenm
parents: 7562
diff changeset
664 for(j=0; j<in_ch; j++) {
8390efaa0c03 simd downmix
lorenm
parents: 7562
diff changeset
665 v0 += samples[j][i] * matrix[j][0];
8390efaa0c03 simd downmix
lorenm
parents: 7562
diff changeset
666 v1 += samples[j][i] * matrix[j][1];
7554
96d57e3b78e5 optimize ac3_downmix.
lorenm
parents: 7550
diff changeset
667 }
96d57e3b78e5 optimize ac3_downmix.
lorenm
parents: 7550
diff changeset
668 samples[0][i] = v0;
96d57e3b78e5 optimize ac3_downmix.
lorenm
parents: 7550
diff changeset
669 samples[1][i] = v1;
5480
930bca6dd95f add support for downmixing to stereo or mono
jbr
parents: 5479
diff changeset
670 }
7563
8390efaa0c03 simd downmix
lorenm
parents: 7562
diff changeset
671 } else if(out_ch == 1) {
8390efaa0c03 simd downmix
lorenm
parents: 7562
diff changeset
672 for(i=0; i<len; i++) {
7554
96d57e3b78e5 optimize ac3_downmix.
lorenm
parents: 7550
diff changeset
673 v0 = 0.0f;
7563
8390efaa0c03 simd downmix
lorenm
parents: 7562
diff changeset
674 for(j=0; j<in_ch; j++)
8390efaa0c03 simd downmix
lorenm
parents: 7562
diff changeset
675 v0 += samples[j][i] * matrix[j][0];
7554
96d57e3b78e5 optimize ac3_downmix.
lorenm
parents: 7550
diff changeset
676 samples[0][i] = v0;
5480
930bca6dd95f add support for downmixing to stereo or mono
jbr
parents: 5479
diff changeset
677 }
930bca6dd95f add support for downmixing to stereo or mono
jbr
parents: 5479
diff changeset
678 }
930bca6dd95f add support for downmixing to stereo or mono
jbr
parents: 5479
diff changeset
679 }
930bca6dd95f add support for downmixing to stereo or mono
jbr
parents: 5479
diff changeset
680
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
681 /**
6480
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
682 * 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
683 */
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
684 static void ac3_upmix_delay(AC3DecodeContext *s)
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
685 {
7625
da9353cd6d71 get data size based on the actual data array instead of coding-in the calculation
jbr
parents: 7624
diff changeset
686 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
687 switch(s->channel_mode) {
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
688 case AC3_CHMODE_DUALMONO:
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
689 case AC3_CHMODE_STEREO:
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
690 /* upmix mono to stereo */
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
691 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
692 break;
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
693 case AC3_CHMODE_2F2R:
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
694 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
695 case AC3_CHMODE_2F1R:
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
696 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
697 break;
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
698 case AC3_CHMODE_3F2R:
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
699 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
700 case AC3_CHMODE_3F1R:
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
701 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
702 case AC3_CHMODE_3F:
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
703 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
704 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
705 break;
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
706 }
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
707 }
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
708
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
709 /**
8135
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
710 * Decode band structure for coupling, spectral extension, or enhanced coupling.
10016
0649c00003a1 cosmetics: add more detailed information to the documentation for
jbr
parents: 9983
diff changeset
711 * The band structure defines how many subbands are in each band. For each
0649c00003a1 cosmetics: add more detailed information to the documentation for
jbr
parents: 9983
diff changeset
712 * subband in the range, 1 means it is combined with the previous band, and 0
0649c00003a1 cosmetics: add more detailed information to the documentation for
jbr
parents: 9983
diff changeset
713 * means that it starts a new band.
0649c00003a1 cosmetics: add more detailed information to the documentation for
jbr
parents: 9983
diff changeset
714 *
8135
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
715 * @param[in] gbc bit reader context
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
716 * @param[in] blk block number
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
717 * @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
718 * @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
719 * @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
720 * @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
721 * @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
722 * @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
723 * @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
724 */
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
725 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
726 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
727 const uint8_t *default_band_struct,
10023
be3245d0147c cosmetics after last commit
jbr
parents: 10022
diff changeset
728 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
729 {
8255
1c4ec499557e silence gcc warning: ¡Æn_bands¡Ç may be used uninitialized
jbr
parents: 8254
diff changeset
730 int subbnd, bnd, n_subbands, n_bands=0;
8254
be0f5221ccd0 ac3dec: use uint8_t for band sizes
jbr
parents: 8249
diff changeset
731 uint8_t bnd_sz[22];
10022
e60ed9255bf4 Modify decode_band_structure() so that the actual band structure is only
jbr
parents: 10021
diff changeset
732 uint8_t coded_band_struct[22];
e60ed9255bf4 Modify decode_band_structure() so that the actual band structure is only
jbr
parents: 10021
diff changeset
733 const uint8_t *band_struct;
8135
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
734
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
735 n_subbands = end_subband - start_subband;
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
736
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
737 /* 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
738 if (!eac3 || get_bits1(gbc)) {
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
739 for (subbnd = 0; subbnd < n_subbands - 1; subbnd++) {
10022
e60ed9255bf4 Modify decode_band_structure() so that the actual band structure is only
jbr
parents: 10021
diff changeset
740 coded_band_struct[subbnd] = get_bits1(gbc);
8135
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
741 }
10022
e60ed9255bf4 Modify decode_band_structure() so that the actual band structure is only
jbr
parents: 10021
diff changeset
742 band_struct = coded_band_struct;
8135
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
743 } else if (!blk) {
10022
e60ed9255bf4 Modify decode_band_structure() so that the actual band structure is only
jbr
parents: 10021
diff changeset
744 band_struct = &default_band_struct[start_subband+1];
e60ed9255bf4 Modify decode_band_structure() so that the actual band structure is only
jbr
parents: 10021
diff changeset
745 } else {
e60ed9255bf4 Modify decode_band_structure() so that the actual band structure is only
jbr
parents: 10021
diff changeset
746 /* no change in band structure */
e60ed9255bf4 Modify decode_band_structure() so that the actual band structure is only
jbr
parents: 10021
diff changeset
747 return;
8135
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
748 }
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 /* 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
751 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
752 instead of 12. */
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
753 if (num_bands || band_sizes ) {
8142
f17b1eb9ccd1 revert r15812 (E-AC-3 Spectral Extension) pending further review
jbr
parents: 8139
diff changeset
754 n_bands = n_subbands;
8135
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
755 bnd_sz[0] = ecpl ? 6 : 12;
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
756 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
757 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
758 if (band_struct[subbnd-1]) {
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
759 n_bands--;
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
760 bnd_sz[bnd] += subbnd_size;
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
761 } else {
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
762 bnd_sz[++bnd] = subbnd_size;
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
763 }
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
764 }
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
765 }
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
766
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
767 /* set optional output params */
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
768 if (num_bands)
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
769 *num_bands = n_bands;
c82f8f5657ff add a generic function to decode banding structure for coupling, spectral
jbr
parents: 8134
diff changeset
770 if (band_sizes)
8254
be0f5221ccd0 ac3dec: use uint8_t for band sizes
jbr
parents: 8249
diff changeset
771 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
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 /**
7490
bddd15a1d167 cosmetics: change function name and comments to refer to block decoding
jbr
parents: 7489
diff changeset
775 * 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
776 */
7490
bddd15a1d167 cosmetics: change function name and comments to refer to block decoding
jbr
parents: 7489
diff changeset
777 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
778 {
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
779 int fbw_channels = s->fbw_channels;
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
780 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
781 int i, bnd, seg, ch;
6480
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
782 int different_transforms;
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
783 int downmix_output;
7026
4bd2ccb0619e store cpl_in_use for all blocks in decode context
jbr
parents: 7020
diff changeset
784 int cpl_in_use;
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
785 GetBitContext *gbc = &s->gbc;
5476
e50f0d583a36 consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents: 5475
diff changeset
786 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
787
5476
e50f0d583a36 consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents: 5475
diff changeset
788 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
789
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
790 /* block switch flags */
6480
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
791 different_transforms = 0;
7626
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
792 if (s->block_switch_syntax) {
7627
93c5703328d6 cosmetics: indentation
jbr
parents: 7626
diff changeset
793 for (ch = 1; ch <= fbw_channels; ch++) {
93c5703328d6 cosmetics: indentation
jbr
parents: 7626
diff changeset
794 s->block_switch[ch] = get_bits1(gbc);
93c5703328d6 cosmetics: indentation
jbr
parents: 7626
diff changeset
795 if(ch > 1 && s->block_switch[ch] != s->block_switch[1])
93c5703328d6 cosmetics: indentation
jbr
parents: 7626
diff changeset
796 different_transforms = 1;
93c5703328d6 cosmetics: indentation
jbr
parents: 7626
diff changeset
797 }
7626
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
798 }
5309
0662a270aab7 AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents: 5308
diff changeset
799
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
800 /* dithering flags */
7626
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
801 if (s->dither_flag_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->dither_flag[ch] = get_bits1(gbc);
93c5703328d6 cosmetics: indentation
jbr
parents: 7626
diff changeset
804 }
7626
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
805 }
5309
0662a270aab7 AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents: 5308
diff changeset
806
5497
377e9152aa9b use array for dynamic range scaling factors
jbr
parents: 5495
diff changeset
807 /* dynamic range */
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
808 i = !(s->channel_mode);
5497
377e9152aa9b use array for dynamic range scaling factors
jbr
parents: 5495
diff changeset
809 do {
6089
12a77958941f cosmetics: rename GetBitContext gb to gbc
jbr
parents: 6088
diff changeset
810 if(get_bits1(gbc)) {
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
811 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
812 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
813 } else if(blk == 0) {
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
814 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
815 }
5497
377e9152aa9b use array for dynamic range scaling factors
jbr
parents: 5495
diff changeset
816 } while(i--);
5309
0662a270aab7 AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents: 5308
diff changeset
817
7664
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
818 /* spectral extension strategy */
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
819 if (s->eac3 && (!blk || get_bits1(gbc))) {
8142
f17b1eb9ccd1 revert r15812 (E-AC-3 Spectral Extension) pending further review
jbr
parents: 8139
diff changeset
820 if (get_bits1(gbc)) {
9891
7ad7d4094d1f Rename ff_log_missing_feature() to av_log_missing_feature().
rbultje
parents: 9680
diff changeset
821 av_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
822 return -1;
7664
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
823 }
8142
f17b1eb9ccd1 revert r15812 (E-AC-3 Spectral Extension) pending further review
jbr
parents: 8139
diff changeset
824 /* TODO: parse spectral extension strategy info */
7664
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
825 }
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
826
8142
f17b1eb9ccd1 revert r15812 (E-AC-3 Spectral Extension) pending further review
jbr
parents: 8139
diff changeset
827 /* TODO: spectral extension coordinates */
7664
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
828
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
829 /* coupling strategy */
7746
abb4c660f9df commit more OKed parts of the E-AC-3 decoder
jbr
parents: 7740
diff changeset
830 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
831 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
832 if (!s->eac3)
7665
762007251900 cosmetics: indentation
jbr
parents: 7664
diff changeset
833 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
834 if (s->cpl_in_use[blk]) {
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
835 /* coupling in use */
8132
4cd689b64c36 cosmetics: rename two variables
jbr
parents: 7831
diff changeset
836 int cpl_start_subband, cpl_end_subband;
5414
9746c9a0384f change 2 fields from context to local variables
jbr
parents: 5413
diff changeset
837
6868
5387096bf92a add check for invalid channel mode when coupling is used
jbr
parents: 6763
diff changeset
838 if (channel_mode < AC3_CHMODE_STEREO) {
5387096bf92a add check for invalid channel mode when coupling is used
jbr
parents: 6763
diff changeset
839 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
840 return -1;
5387096bf92a add check for invalid channel mode when coupling is used
jbr
parents: 6763
diff changeset
841 }
5387096bf92a add check for invalid channel mode when coupling is used
jbr
parents: 6763
diff changeset
842
7664
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
843 /* check for enhanced coupling */
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
844 if (s->eac3 && get_bits1(gbc)) {
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
845 /* TODO: parse enhanced coupling strategy info */
9891
7ad7d4094d1f Rename ff_log_missing_feature() to av_log_missing_feature().
rbultje
parents: 9680
diff changeset
846 av_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
847 return -1;
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
848 }
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
849
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
850 /* determine which channels are coupled */
7664
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
851 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
852 s->channel_in_cpl[1] = 1;
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
853 s->channel_in_cpl[2] = 1;
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
854 } else {
7665
762007251900 cosmetics: indentation
jbr
parents: 7664
diff changeset
855 for (ch = 1; ch <= fbw_channels; ch++)
762007251900 cosmetics: indentation
jbr
parents: 7664
diff changeset
856 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
857 }
5309
0662a270aab7 AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents: 5308
diff changeset
858
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
859 /* phase flags in use */
6005
7d9dddd54817 cosmetics: rename common ac3 variables
jbr
parents: 6003
diff changeset
860 if (channel_mode == AC3_CHMODE_STEREO)
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
861 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
862
7664
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
863 /* coupling frequency range */
8142
f17b1eb9ccd1 revert r15812 (E-AC-3 Spectral Extension) pending further review
jbr
parents: 8139
diff changeset
864 /* TODO: modify coupling end freq if spectral extension is used */
8132
4cd689b64c36 cosmetics: rename two variables
jbr
parents: 7831
diff changeset
865 cpl_start_subband = get_bits(gbc, 4);
8142
f17b1eb9ccd1 revert r15812 (E-AC-3 Spectral Extension) pending further review
jbr
parents: 8139
diff changeset
866 cpl_end_subband = get_bits(gbc, 4) + 3;
9659
b4350a6fb24a ac3dec: fix coupling range check. the start subband must be less than
jbr
parents: 9658
diff changeset
867 if (cpl_start_subband >= cpl_end_subband) {
b4350a6fb24a ac3dec: fix coupling range check. the start subband must be less than
jbr
parents: 9658
diff changeset
868 av_log(s->avctx, AV_LOG_ERROR, "invalid coupling range (%d >= %d)\n",
8133
043e1096c83d simplify decoding of coupling frequency range
jbr
parents: 8132
diff changeset
869 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
870 return -1;
0662a270aab7 AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents: 5308
diff changeset
871 }
8132
4cd689b64c36 cosmetics: rename two variables
jbr
parents: 7831
diff changeset
872 s->start_freq[CPL_CH] = cpl_start_subband * 12 + 37;
8133
043e1096c83d simplify decoding of coupling frequency range
jbr
parents: 8132
diff changeset
873 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
874
9608
f3c6d57a50aa cosmetics: line wrap and vertical alignment
jbr
parents: 9607
diff changeset
875 decode_band_structure(gbc, blk, s->eac3, 0, cpl_start_subband,
f3c6d57a50aa cosmetics: line wrap and vertical alignment
jbr
parents: 9607
diff changeset
876 cpl_end_subband,
f3c6d57a50aa cosmetics: line wrap and vertical alignment
jbr
parents: 9607
diff changeset
877 ff_eac3_default_cpl_band_struct,
10023
be3245d0147c cosmetics after last commit
jbr
parents: 10022
diff changeset
878 &s->num_cpl_bands, s->cpl_band_sizes);
5388
1bdaa3c03526 change some bit masks to arrays
jbr
parents: 5387
diff changeset
879 } else {
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
880 /* coupling not in use */
7664
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
881 for (ch = 1; ch <= fbw_channels; ch++) {
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
882 s->channel_in_cpl[ch] = 0;
7664
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
883 s->first_cpl_coords[ch] = 1;
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
884 }
7667
ce3402b964cd fix decoding of coupling leak info for normal AC-3
jbr
parents: 7665
diff changeset
885 s->first_cpl_leak = s->eac3;
7664
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
886 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
887 }
7664
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
888 } else if (!s->eac3) {
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
889 if(!blk) {
7665
762007251900 cosmetics: indentation
jbr
parents: 7664
diff changeset
890 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
891 return -1;
762007251900 cosmetics: indentation
jbr
parents: 7664
diff changeset
892 } else {
762007251900 cosmetics: indentation
jbr
parents: 7664
diff changeset
893 s->cpl_in_use[blk] = s->cpl_in_use[blk-1];
762007251900 cosmetics: indentation
jbr
parents: 7664
diff changeset
894 }
7664
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
895 }
7328
9309e19c2b98 read 'coupling in use' parameter from bitstream into decoder context first,
jbr
parents: 7311
diff changeset
896 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
897
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
898 /* coupling coordinates */
7026
4bd2ccb0619e store cpl_in_use for all blocks in decode context
jbr
parents: 7020
diff changeset
899 if (cpl_in_use) {
6006
ed7a232d570a cosmetics: rename ac3 decoder variables
jbr
parents: 6005
diff changeset
900 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
901
6006
ed7a232d570a cosmetics: rename ac3 decoder variables
jbr
parents: 6005
diff changeset
902 for (ch = 1; ch <= fbw_channels; ch++) {
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
903 if (s->channel_in_cpl[ch]) {
7746
abb4c660f9df commit more OKed parts of the E-AC-3 decoder
jbr
parents: 7740
diff changeset
904 if ((s->eac3 && s->first_cpl_coords[ch]) || get_bits1(gbc)) {
6006
ed7a232d570a cosmetics: rename ac3 decoder variables
jbr
parents: 6005
diff changeset
905 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
906 s->first_cpl_coords[ch] = 0;
6006
ed7a232d570a cosmetics: rename ac3 decoder variables
jbr
parents: 6005
diff changeset
907 cpl_coords_exist = 1;
6089
12a77958941f cosmetics: rename GetBitContext gb to gbc
jbr
parents: 6088
diff changeset
908 master_cpl_coord = 3 * get_bits(gbc, 2);
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
909 for (bnd = 0; bnd < s->num_cpl_bands; bnd++) {
6089
12a77958941f cosmetics: rename GetBitContext gb to gbc
jbr
parents: 6088
diff changeset
910 cpl_coord_exp = get_bits(gbc, 4);
12a77958941f cosmetics: rename GetBitContext gb to gbc
jbr
parents: 6088
diff changeset
911 cpl_coord_mant = get_bits(gbc, 4);
6006
ed7a232d570a cosmetics: rename ac3 decoder variables
jbr
parents: 6005
diff changeset
912 if (cpl_coord_exp == 15)
6430
de7502093922 Use 24-bit fixed-point transform coefficients until just before MDCT. This
jbr
parents: 6142
diff changeset
913 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
914 else
6430
de7502093922 Use 24-bit fixed-point transform coefficients until just before MDCT. This
jbr
parents: 6142
diff changeset
915 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
916 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
917 }
6869
59ae0494b656 add checks for missing information in the first block
jbr
parents: 6868
diff changeset
918 } else if (!blk) {
59ae0494b656 add checks for missing information in the first block
jbr
parents: 6868
diff changeset
919 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
920 return -1;
5304
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
921 }
7746
abb4c660f9df commit more OKed parts of the E-AC-3 decoder
jbr
parents: 7740
diff changeset
922 } else {
abb4c660f9df commit more OKed parts of the E-AC-3 decoder
jbr
parents: 7740
diff changeset
923 /* channel not in coupling */
abb4c660f9df commit more OKed parts of the E-AC-3 decoder
jbr
parents: 7740
diff changeset
924 s->first_cpl_coords[ch] = 1;
5461
c427d8950769 cosmetics: use braces when it makes the code easier to read.
jbr
parents: 5460
diff changeset
925 }
c427d8950769 cosmetics: use braces when it makes the code easier to read.
jbr
parents: 5460
diff changeset
926 }
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
927 /* phase flags */
6123
8d88831a2777 fix phase flag processing for the case when coupling coordinates are reused
jbr
parents: 6117
diff changeset
928 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
929 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
930 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
931 }
c427d8950769 cosmetics: use braces when it makes the code easier to read.
jbr
parents: 5460
diff changeset
932 }
5309
0662a270aab7 AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents: 5308
diff changeset
933 }
0662a270aab7 AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents: 5308
diff changeset
934
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
935 /* stereo rematrixing strategy and band structure */
6005
7d9dddd54817 cosmetics: rename common ac3 variables
jbr
parents: 6003
diff changeset
936 if (channel_mode == AC3_CHMODE_STEREO) {
7664
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
937 if ((s->eac3 && !blk) || get_bits1(gbc)) {
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
938 s->num_rematrixing_bands = 4;
8142
f17b1eb9ccd1 revert r15812 (E-AC-3 Spectral Extension) pending further review
jbr
parents: 8139
diff changeset
939 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
940 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
941 for(bnd=0; bnd<s->num_rematrixing_bands; bnd++)
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
942 s->rematrixing_flags[bnd] = get_bits1(gbc);
6869
59ae0494b656 add checks for missing information in the first block
jbr
parents: 6868
diff changeset
943 } else if (!blk) {
10333
c1c4435539e6 Change an error to a warning to support broken AC-3 files known to exist.
jbr
parents: 10331
diff changeset
944 av_log(s->avctx, AV_LOG_WARNING, "Warning: new rematrixing strategy not present in block 0\n");
c1c4435539e6 Change an error to a warning to support broken AC-3 files known to exist.
jbr
parents: 10331
diff changeset
945 s->num_rematrixing_bands = 0;
5305
5892b4a6380b AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents: 5304
diff changeset
946 }
5303
b8821ff5c30d AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff changeset
947 }
5309
0662a270aab7 AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents: 5308
diff changeset
948
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
949 /* exponent strategies for each channel */
7026
4bd2ccb0619e store cpl_in_use for all blocks in decode context
jbr
parents: 7020
diff changeset
950 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
951 if (!s->eac3)
7710
571c3c9bc025 cosmetics: indent after last commit
jbr
parents: 7709
diff changeset
952 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
953 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
954 bit_alloc_stages[ch] = 3;
e50f0d583a36 consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents: 5475
diff changeset
955 }
5309
0662a270aab7 AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents: 5308
diff changeset
956
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
957 /* channel bandwidth */
6006
ed7a232d570a cosmetics: rename ac3 decoder variables
jbr
parents: 6005
diff changeset
958 for (ch = 1; ch <= fbw_channels; ch++) {
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
959 s->start_freq[ch] = 0;
7027
1edec36c02c5 store exp_strategy for all blocks in decode context
jbr
parents: 7026
diff changeset
960 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
961 int group_size;
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
962 int prev = s->end_freq[ch];
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
963 if (s->channel_in_cpl[ch])
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
964 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
965 else {
6089
12a77958941f cosmetics: rename GetBitContext gb to gbc
jbr
parents: 6088
diff changeset
966 int bandwidth_code = get_bits(gbc, 6);
6006
ed7a232d570a cosmetics: rename ac3 decoder variables
jbr
parents: 6005
diff changeset
967 if (bandwidth_code > 60) {
8134
10541875e559 add a line break in error message text
jbr
parents: 8133
diff changeset
968 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
969 return -1;
5892b4a6380b AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents: 5304
diff changeset
970 }
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
971 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
972 }
7027
1edec36c02c5 store exp_strategy for all blocks in decode context
jbr
parents: 7026
diff changeset
973 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
974 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
975 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
976 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
977 }
5461
c427d8950769 cosmetics: use braces when it makes the code easier to read.
jbr
parents: 5460
diff changeset
978 }
7027
1edec36c02c5 store exp_strategy for all blocks in decode context
jbr
parents: 7026
diff changeset
979 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
980 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
981 (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
982 }
5309
0662a270aab7 AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents: 5308
diff changeset
983
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
984 /* decode exponents for each channel */
7026
4bd2ccb0619e store cpl_in_use for all blocks in decode context
jbr
parents: 7020
diff changeset
985 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
986 if (s->exp_strategy[blk][ch] != EXP_REUSE) {
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
987 s->dexps[ch][0] = get_bits(gbc, 4) << !ch;
8268
4dd63fc58a87 ac3dec: detect out-of-range exponents
jbr
parents: 8255
diff changeset
988 if (decode_exponents(gbc, s->exp_strategy[blk][ch],
8269
e7949e116f56 cosmetics: reindent after last commit
jbr
parents: 8268
diff changeset
989 s->num_exp_groups[ch], s->dexps[ch][0],
e7949e116f56 cosmetics: reindent after last commit
jbr
parents: 8268
diff changeset
990 &s->dexps[ch][s->start_freq[ch]+!!ch])) {
8268
4dd63fc58a87 ac3dec: detect out-of-range exponents
jbr
parents: 8255
diff changeset
991 av_log(s->avctx, AV_LOG_ERROR, "exponent out-of-range\n");
4dd63fc58a87 ac3dec: detect out-of-range exponents
jbr
parents: 8255
diff changeset
992 return -1;
4dd63fc58a87 ac3dec: detect out-of-range exponents
jbr
parents: 8255
diff changeset
993 }
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
994 if(ch != CPL_CH && ch != s->lfe_ch)
6089
12a77958941f cosmetics: rename GetBitContext gb to gbc
jbr
parents: 6088
diff changeset
995 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
996 }
5461
c427d8950769 cosmetics: use braces when it makes the code easier to read.
jbr
parents: 5460
diff changeset
997 }
5309
0662a270aab7 AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents: 5308
diff changeset
998
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
999 /* bit allocation information */
7626
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
1000 if (s->bit_allocation_syntax) {
7627
93c5703328d6 cosmetics: indentation
jbr
parents: 7626
diff changeset
1001 if (get_bits1(gbc)) {
93c5703328d6 cosmetics: indentation
jbr
parents: 7626
diff changeset
1002 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
1003 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
1004 s->bit_alloc_params.slow_gain = ff_ac3_slow_gain_tab[get_bits(gbc, 2)];
93c5703328d6 cosmetics: indentation
jbr
parents: 7626
diff changeset
1005 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
1006 s->bit_alloc_params.floor = ff_ac3_floor_tab[get_bits(gbc, 3)];
7627
93c5703328d6 cosmetics: indentation
jbr
parents: 7626
diff changeset
1007 for(ch=!cpl_in_use; ch<=s->channels; ch++)
93c5703328d6 cosmetics: indentation
jbr
parents: 7626
diff changeset
1008 bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2);
93c5703328d6 cosmetics: indentation
jbr
parents: 7626
diff changeset
1009 } else if (!blk) {
93c5703328d6 cosmetics: indentation
jbr
parents: 7626
diff changeset
1010 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
1011 return -1;
93c5703328d6 cosmetics: indentation
jbr
parents: 7626
diff changeset
1012 }
7626
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
1013 }
5309
0662a270aab7 AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents: 5308
diff changeset
1014
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
1015 /* 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
1016 if(!s->eac3 || !blk){
54bcd7270fd9 commit more OKed parts of the E-AC-3 decoder
jbr
parents: 7746
diff changeset
1017 if(s->snr_offset_strategy && get_bits1(gbc)) {
7749
f44fc478863f cosmetics: indentation
jbr
parents: 7747
diff changeset
1018 int snr = 0;
f44fc478863f cosmetics: indentation
jbr
parents: 7747
diff changeset
1019 int csnr;
f44fc478863f cosmetics: indentation
jbr
parents: 7747
diff changeset
1020 csnr = (get_bits(gbc, 6) - 15) << 4;
f44fc478863f cosmetics: indentation
jbr
parents: 7747
diff changeset
1021 for (i = ch = !cpl_in_use; ch <= s->channels; ch++) {
f44fc478863f cosmetics: indentation
jbr
parents: 7747
diff changeset
1022 /* snr offset */
f44fc478863f cosmetics: indentation
jbr
parents: 7747
diff changeset
1023 if (ch == i || s->snr_offset_strategy == 2)
f44fc478863f cosmetics: indentation
jbr
parents: 7747
diff changeset
1024 snr = (csnr + get_bits(gbc, 4)) << 2;
f44fc478863f cosmetics: indentation
jbr
parents: 7747
diff changeset
1025 /* run at least last bit allocation stage if snr offset changes */
f44fc478863f cosmetics: indentation
jbr
parents: 7747
diff changeset
1026 if(blk && s->snr_offset[ch] != snr) {
f44fc478863f cosmetics: indentation
jbr
parents: 7747
diff changeset
1027 bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 1);
f44fc478863f cosmetics: indentation
jbr
parents: 7747
diff changeset
1028 }
f44fc478863f cosmetics: indentation
jbr
parents: 7747
diff changeset
1029 s->snr_offset[ch] = snr;
7747
54bcd7270fd9 commit more OKed parts of the E-AC-3 decoder
jbr
parents: 7746
diff changeset
1030
54bcd7270fd9 commit more OKed parts of the E-AC-3 decoder
jbr
parents: 7746
diff changeset
1031 /* fast gain (normal AC-3 only) */
54bcd7270fd9 commit more OKed parts of the E-AC-3 decoder
jbr
parents: 7746
diff changeset
1032 if (!s->eac3) {
54bcd7270fd9 commit more OKed parts of the E-AC-3 decoder
jbr
parents: 7746
diff changeset
1033 int prev = s->fast_gain[ch];
7749
f44fc478863f cosmetics: indentation
jbr
parents: 7747
diff changeset
1034 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
1035 /* 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
1036 if(blk && prev != s->fast_gain[ch])
54bcd7270fd9 commit more OKed parts of the E-AC-3 decoder
jbr
parents: 7746
diff changeset
1037 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
1038 }
7749
f44fc478863f cosmetics: indentation
jbr
parents: 7747
diff changeset
1039 }
7747
54bcd7270fd9 commit more OKed parts of the E-AC-3 decoder
jbr
parents: 7746
diff changeset
1040 } else if (!s->eac3 && !blk) {
7749
f44fc478863f cosmetics: indentation
jbr
parents: 7747
diff changeset
1041 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
1042 return -1;
7747
54bcd7270fd9 commit more OKed parts of the E-AC-3 decoder
jbr
parents: 7746
diff changeset
1043 }
5303
b8821ff5c30d AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff changeset
1044 }
5309
0662a270aab7 AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents: 5308
diff changeset
1045
7664
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
1046 /* fast gain (E-AC-3 only) */
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
1047 if (s->fast_gain_syntax && get_bits1(gbc)) {
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
1048 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
1049 int prev = s->fast_gain[ch];
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
1050 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
1051 /* 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
1052 if(blk && prev != s->fast_gain[ch])
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
1053 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
1054 }
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
1055 } else if (s->eac3 && !blk) {
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
1056 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
1057 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
1058 }
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
1059
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
1060 /* 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
1061 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
1062 skip_bits(gbc, 10); // skip converter snr offset
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
1063 }
a78c2ebb8149 add some approved parts of the E-AC-3 decoder
jbr
parents: 7627
diff changeset
1064
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
1065 /* coupling leak information */
7026
4bd2ccb0619e store cpl_in_use for all blocks in decode context
jbr
parents: 7020
diff changeset
1066 if (cpl_in_use) {
7747
54bcd7270fd9 commit more OKed parts of the E-AC-3 decoder
jbr
parents: 7746
diff changeset
1067 if (s->first_cpl_leak || get_bits1(gbc)) {
54bcd7270fd9 commit more OKed parts of the E-AC-3 decoder
jbr
parents: 7746
diff changeset
1068 int fl = get_bits(gbc, 3);
54bcd7270fd9 commit more OKed parts of the E-AC-3 decoder
jbr
parents: 7746
diff changeset
1069 int sl = get_bits(gbc, 3);
54bcd7270fd9 commit more OKed parts of the E-AC-3 decoder
jbr
parents: 7746
diff changeset
1070 /* 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
1071 coupling leak changes */
54bcd7270fd9 commit more OKed parts of the E-AC-3 decoder
jbr
parents: 7746
diff changeset
1072 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
1073 sl != s->bit_alloc_params.cpl_slow_leak)) {
7749
f44fc478863f cosmetics: indentation
jbr
parents: 7747
diff changeset
1074 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
1075 }
54bcd7270fd9 commit more OKed parts of the E-AC-3 decoder
jbr
parents: 7746
diff changeset
1076 s->bit_alloc_params.cpl_fast_leak = fl;
54bcd7270fd9 commit more OKed parts of the E-AC-3 decoder
jbr
parents: 7746
diff changeset
1077 s->bit_alloc_params.cpl_slow_leak = sl;
54bcd7270fd9 commit more OKed parts of the E-AC-3 decoder
jbr
parents: 7746
diff changeset
1078 } else if (!s->eac3 && !blk) {
6872
60236c4f0b76 cosmetics: indent
jbr
parents: 6871
diff changeset
1079 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
1080 return -1;
60236c4f0b76 cosmetics: indent
jbr
parents: 6871
diff changeset
1081 }
7747
54bcd7270fd9 commit more OKed parts of the E-AC-3 decoder
jbr
parents: 7746
diff changeset
1082 s->first_cpl_leak = 0;
6871
dc6c9f74f2c1 10l: fix error in commit r13382
jbr
parents: 6869
diff changeset
1083 }
5309
0662a270aab7 AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents: 5308
diff changeset
1084
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
1085 /* delta bit allocation information */
7626
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
1086 if (s->dba_syntax && get_bits1(gbc)) {
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
1087 /* delta bit allocation exists (strategy) */
7026
4bd2ccb0619e store cpl_in_use for all blocks in decode context
jbr
parents: 7020
diff changeset
1088 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
1089 s->dba_mode[ch] = get_bits(gbc, 2);
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
1090 if (s->dba_mode[ch] == DBA_RESERVED) {
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
1091 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
1092 return -1;
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
1093 }
5476
e50f0d583a36 consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents: 5475
diff changeset
1094 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
1095 }
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
1096 /* channel delta offset, len and bit allocation */
7026
4bd2ccb0619e store cpl_in_use for all blocks in decode context
jbr
parents: 7020
diff changeset
1097 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
1098 if (s->dba_mode[ch] == DBA_NEW) {
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
1099 s->dba_nsegs[ch] = get_bits(gbc, 3);
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
1100 for (seg = 0; seg <= s->dba_nsegs[ch]; seg++) {
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
1101 s->dba_offsets[ch][seg] = get_bits(gbc, 5);
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
1102 s->dba_lengths[ch][seg] = get_bits(gbc, 4);
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
1103 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
1104 }
6954
57797b6c9d59 new dba values requires running last 2 bit allocation stages
jbr
parents: 6953
diff changeset
1105 /* 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
1106 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
1107 }
5461
c427d8950769 cosmetics: use braces when it makes the code easier to read.
jbr
parents: 5460
diff changeset
1108 }
5386
d6347c3cb329 Use shared AC-3 header parsing. Move some initializations to block parsing function.
jbr
parents: 5385
diff changeset
1109 } else if(blk == 0) {
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
1110 for(ch=0; ch<=s->channels; ch++) {
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
1111 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
1112 }
5303
b8821ff5c30d AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff changeset
1113 }
5305
5892b4a6380b AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents: 5304
diff changeset
1114
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
1115 /* Bit allocation */
7026
4bd2ccb0619e store cpl_in_use for all blocks in decode context
jbr
parents: 7020
diff changeset
1116 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
1117 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
1118 /* Exponent mapping into PSD and PSD integration */
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
1119 ff_ac3_bit_alloc_calc_psd(s->dexps[ch],
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
1120 s->start_freq[ch], s->end_freq[ch],
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
1121 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
1122 }
5476
e50f0d583a36 consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents: 5475
diff changeset
1123 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
1124 /* 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
1125 Apply delta bit allocation */
8279
6c2dcc1410bb ac3: detect dba errors and prevent writing past end of array
jbr
parents: 8275
diff changeset
1126 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
1127 s->start_freq[ch], s->end_freq[ch],
63aba08af550 cosmetics: alignment after last commit
jbr
parents: 8279
diff changeset
1128 s->fast_gain[ch], (ch == s->lfe_ch),
63aba08af550 cosmetics: alignment after last commit
jbr
parents: 8279
diff changeset
1129 s->dba_mode[ch], s->dba_nsegs[ch],
63aba08af550 cosmetics: alignment after last commit
jbr
parents: 8279
diff changeset
1130 s->dba_offsets[ch], s->dba_lengths[ch],
63aba08af550 cosmetics: alignment after last commit
jbr
parents: 8279
diff changeset
1131 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
1132 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
1133 return -1;
6c2dcc1410bb ac3: detect dba errors and prevent writing past end of array
jbr
parents: 8275
diff changeset
1134 }
5461
c427d8950769 cosmetics: use braces when it makes the code easier to read.
jbr
parents: 5460
diff changeset
1135 }
5476
e50f0d583a36 consolidate decoding of lfe and coupling channels with decoding of full-bandwidth channels.
jbr
parents: 5475
diff changeset
1136 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
1137 /* Compute bit allocation */
7626
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
1138 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
1139 ff_eac3_hebap_tab : ff_ac3_bap_tab;
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
1140 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
1141 s->start_freq[ch], s->end_freq[ch],
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
1142 s->snr_offset[ch],
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
1143 s->bit_alloc_params.floor,
7626
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
1144 bap_tab, s->bap[ch]);
5461
c427d8950769 cosmetics: use braces when it makes the code easier to read.
jbr
parents: 5460
diff changeset
1145 }
5310
9aa9197034d7 AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
jbr
parents: 5309
diff changeset
1146 }
5309
0662a270aab7 AC-3 decoder, soc revision 38, Aug 7 00:03:00 2006 UTC by cloud9
jbr
parents: 5308
diff changeset
1147
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
1148 /* unused dummy data */
7626
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
1149 if (s->skip_syntax && get_bits1(gbc)) {
6089
12a77958941f cosmetics: rename GetBitContext gb to gbc
jbr
parents: 6088
diff changeset
1150 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
1151 while(skipl--)
6089
12a77958941f cosmetics: rename GetBitContext gb to gbc
jbr
parents: 6088
diff changeset
1152 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
1153 }
5499
838ba4dafaae cosmetics: blank lines, remove some comments
jbr
parents: 5498
diff changeset
1154
5304
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
1155 /* unpack the transform coefficients
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
1156 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
1157 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
1158
7626
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
1159 /* TODO: generate enhanced coupling coordinates and uncouple */
8618fb5d9bce commit the OKed parts of the E-AC-3 decoder
jbr
parents: 7625
diff changeset
1160
8142
f17b1eb9ccd1 revert r15812 (E-AC-3 Spectral Extension) pending further review
jbr
parents: 8139
diff changeset
1161 /* TODO: apply spectral extension */
f17b1eb9ccd1 revert r15812 (E-AC-3 Spectral Extension) pending further review
jbr
parents: 8139
diff changeset
1162
5304
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
1163 /* recover coefficients if rematrixing is in use */
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
1164 if(s->channel_mode == AC3_CHMODE_STEREO)
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
1165 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
1166
6032
f74202e7e896 Skip dialog normalization. It shouldn't be used by the decoder, and there is
jbr
parents: 6031
diff changeset
1167 /* apply scaling to coefficients (headroom, dynrng) */
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
1168 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
1169 float gain = s->mul_bias / 4194304.0f;
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
1170 if(s->channel_mode == AC3_CHMODE_DUALMONO) {
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
1171 gain *= s->dynamic_range[ch-1];
5412
3f6a6dda6b2d remove broken downmixing. will add new implementation later.
jbr
parents: 5393
diff changeset
1172 } else {
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
1173 gain *= s->dynamic_range[0];
5412
3f6a6dda6b2d remove broken downmixing. will add new implementation later.
jbr
parents: 5393
diff changeset
1174 }
7564
7cf793954871 simd int->float
lorenm
parents: 7563
diff changeset
1175 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
1176 }
5318
ef4ef249ca72 AC-3 decoder, soc revision 58, Aug 19 14:20:45 2006 UTC by cloud9
jbr
parents: 5317
diff changeset
1177
6480
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
1178 /* 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
1179 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
1180 and short transforms cannot be mixed. */
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
1181 downmix_output = s->channels != s->out_channels &&
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
1182 !((s->output_mode & AC3_OUTPUT_LFEON) &&
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
1183 s->fbw_channels == s->out_channels);
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
1184 if(different_transforms) {
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
1185 /* 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
1186 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
1187 if(s->downmixed) {
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
1188 s->downmixed = 0;
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
1189 ac3_upmix_delay(s);
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
1190 }
5306
abc5c130b448 AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents: 5305
diff changeset
1191
6480
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
1192 do_imdct(s, s->channels);
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
1193
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
1194 if(downmix_output) {
7563
8390efaa0c03 simd downmix
lorenm
parents: 7562
diff changeset
1195 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
1196 }
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
1197 } else {
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
1198 if(downmix_output) {
7563
8390efaa0c03 simd downmix
lorenm
parents: 7562
diff changeset
1199 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
1200 }
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
1201
7562
ef456ee01ea2 don't mark the delayed samples for upmixing if they haven't been downmixed
lorenm
parents: 7561
diff changeset
1202 if(downmix_output && !s->downmixed) {
6480
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
1203 s->downmixed = 1;
7563
8390efaa0c03 simd downmix
lorenm
parents: 7562
diff changeset
1204 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
1205 }
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
1206
6f01a499e785 downmix before imdct unless different size transforms are used. about 20%
jbr
parents: 6432
diff changeset
1207 do_imdct(s, s->out_channels);
5480
930bca6dd95f add support for downmixing to stereo or mono
jbr
parents: 5479
diff changeset
1208 }
930bca6dd95f add support for downmixing to stereo or mono
jbr
parents: 5479
diff changeset
1209
5479
943c732c905d use dsputil for float to signed 16-bit sample conversion
jbr
parents: 5477
diff changeset
1210 return 0;
5306
abc5c130b448 AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents: 5305
diff changeset
1211 }
abc5c130b448 AC-3 decoder, soc revision 32, Jul 17 09:37:32 2006 UTC by cloud9
jbr
parents: 5305
diff changeset
1212
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
1213 /**
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
1214 * 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
1215 */
6487
8f1b27d73a07 make input buffer const, as it should be. fixes a warning.
jbr
parents: 6480
diff changeset
1216 static int ac3_decode_frame(AVCodecContext * avctx, void *data, int *data_size,
9355
54bc8a2727b0 Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents: 8629
diff changeset
1217 AVPacket *avpkt)
5304
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
1218 {
9355
54bc8a2727b0 Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents: 8629
diff changeset
1219 const uint8_t *buf = avpkt->data;
54bc8a2727b0 Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents: 8629
diff changeset
1220 int buf_size = avpkt->size;
6092
42bdc549a500 do not need to cast a (void *)
jbr
parents: 6091
diff changeset
1221 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
1222 int16_t *out_samples = (int16_t *)data;
7550
f9e4afa46993 use float_to_int16_interleave in ac3
lorenm
parents: 7549
diff changeset
1223 int blk, ch, err;
9454
7db61b0d21f9 ac3dec: reorder output channels to SMPTE channel order
jbr
parents: 9355
diff changeset
1224 const uint8_t *channel_map;
9605
93029f1a4c14 ac3dec: move channel remapping to outside of block loop
jbr
parents: 9512
diff changeset
1225 const float *output[AC3_MAX_CHANNELS];
5318
ef4ef249ca72 AC-3 decoder, soc revision 58, Aug 19 14:20:45 2006 UTC by cloud9
jbr
parents: 5317
diff changeset
1226
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
1227 /* 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
1228 if (s->input_buffer) {
6536
8f2186d5daca additional protection from segmentation faults and memory access errors by
jbr
parents: 6529
diff changeset
1229 /* 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
1230 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
1231 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
1232 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
1233 } else {
6537
ea2f7235c3e1 cosmetics: indentation after last commit
jbr
parents: 6536
diff changeset
1234 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
1235 }
5305
5892b4a6380b AC-3 decoder, soc revision 31, Jul 14 23:53:28 2006 UTC by cloud9
jbr
parents: 5304
diff changeset
1236
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
1237 /* parse the syncinfo */
6950
ec4e01cb0089 move header error logging to after CRC check
jbr
parents: 6906
diff changeset
1238 *data_size = 0;
7028
4ef389a71e03 split up header parsing function
jbr
parents: 7027
diff changeset
1239 err = parse_frame_header(s);
6950
ec4e01cb0089 move header error logging to after CRC check
jbr
parents: 6906
diff changeset
1240
ec4e01cb0089 move header error logging to after CRC check
jbr
parents: 6906
diff changeset
1241 /* check that reported frame size fits in input buffer */
ec4e01cb0089 move header error logging to after CRC check
jbr
parents: 6906
diff changeset
1242 if(s->frame_size > buf_size) {
ec4e01cb0089 move header error logging to after CRC check
jbr
parents: 6906
diff changeset
1243 av_log(avctx, AV_LOG_ERROR, "incomplete frame\n");
8545
a5402e89a80c Factorise enum of AC3 error types to be usable by AAC in the ADTS patch that
superdump
parents: 8281
diff changeset
1244 err = AAC_AC3_PARSE_ERROR_FRAME_SIZE;
6950
ec4e01cb0089 move header error logging to after CRC check
jbr
parents: 6906
diff changeset
1245 }
ec4e01cb0089 move header error logging to after CRC check
jbr
parents: 6906
diff changeset
1246
ec4e01cb0089 move header error logging to after CRC check
jbr
parents: 6906
diff changeset
1247 /* check for crc mismatch */
8545
a5402e89a80c Factorise enum of AC3 error types to be usable by AAC in the ADTS patch that
superdump
parents: 8281
diff changeset
1248 if(err != AAC_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
1249 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
1250 av_log(avctx, AV_LOG_ERROR, "frame CRC mismatch\n");
8545
a5402e89a80c Factorise enum of AC3 error types to be usable by AAC in the ADTS patch that
superdump
parents: 8281
diff changeset
1251 err = AAC_AC3_PARSE_ERROR_CRC;
6950
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
8545
a5402e89a80c Factorise enum of AC3 error types to be usable by AAC in the ADTS patch that
superdump
parents: 8281
diff changeset
1255 if(err && err != AAC_AC3_PARSE_ERROR_CRC) {
5680
5ae5a74b0e4b better AC3 header error reporting
jbr
parents: 5679
diff changeset
1256 switch(err) {
8545
a5402e89a80c Factorise enum of AC3 error types to be usable by AAC in the ADTS patch that
superdump
parents: 8281
diff changeset
1257 case AAC_AC3_PARSE_ERROR_SYNC:
6950
ec4e01cb0089 move header error logging to after CRC check
jbr
parents: 6906
diff changeset
1258 av_log(avctx, AV_LOG_ERROR, "frame sync error\n");
6999
3d84a99ecfa7 return error on frame sync error
jbr
parents: 6960
diff changeset
1259 return -1;
8545
a5402e89a80c Factorise enum of AC3 error types to be usable by AAC in the ADTS patch that
superdump
parents: 8281
diff changeset
1260 case AAC_AC3_PARSE_ERROR_BSID:
5680
5ae5a74b0e4b better AC3 header error reporting
jbr
parents: 5679
diff changeset
1261 av_log(avctx, AV_LOG_ERROR, "invalid bitstream id\n");
5ae5a74b0e4b better AC3 header error reporting
jbr
parents: 5679
diff changeset
1262 break;
8545
a5402e89a80c Factorise enum of AC3 error types to be usable by AAC in the ADTS patch that
superdump
parents: 8281
diff changeset
1263 case AAC_AC3_PARSE_ERROR_SAMPLE_RATE:
5680
5ae5a74b0e4b better AC3 header error reporting
jbr
parents: 5679
diff changeset
1264 av_log(avctx, AV_LOG_ERROR, "invalid sample rate\n");
5ae5a74b0e4b better AC3 header error reporting
jbr
parents: 5679
diff changeset
1265 break;
8545
a5402e89a80c Factorise enum of AC3 error types to be usable by AAC in the ADTS patch that
superdump
parents: 8281
diff changeset
1266 case AAC_AC3_PARSE_ERROR_FRAME_SIZE:
5680
5ae5a74b0e4b better AC3 header error reporting
jbr
parents: 5679
diff changeset
1267 av_log(avctx, AV_LOG_ERROR, "invalid frame size\n");
5ae5a74b0e4b better AC3 header error reporting
jbr
parents: 5679
diff changeset
1268 break;
8545
a5402e89a80c Factorise enum of AC3 error types to be usable by AAC in the ADTS patch that
superdump
parents: 8281
diff changeset
1269 case AAC_AC3_PARSE_ERROR_FRAME_TYPE:
7014
24ddcb54f147 skip unsupported frame types and substream id's
jbr
parents: 7013
diff changeset
1270 /* skip frame if CRC is ok. otherwise use error concealment. */
24ddcb54f147 skip unsupported frame types and substream id's
jbr
parents: 7013
diff changeset
1271 /* TODO: add support for substreams and dependent frames */
24ddcb54f147 skip unsupported frame types and substream id's
jbr
parents: 7013
diff changeset
1272 if(s->frame_type == EAC3_FRAME_TYPE_DEPENDENT || s->substreamid) {
24ddcb54f147 skip unsupported frame types and substream id's
jbr
parents: 7013
diff changeset
1273 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
1274 return s->frame_size;
24ddcb54f147 skip unsupported frame types and substream id's
jbr
parents: 7013
diff changeset
1275 } else {
7015
d9ac2c5a5d89 cosmetics: indent
jbr
parents: 7014
diff changeset
1276 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
1277 }
6529
5542d0c04a55 using stream type in eac3 parser
bwolowiec
parents: 6517
diff changeset
1278 break;
5680
5ae5a74b0e4b better AC3 header error reporting
jbr
parents: 5679
diff changeset
1279 default:
5ae5a74b0e4b better AC3 header error reporting
jbr
parents: 5679
diff changeset
1280 av_log(avctx, AV_LOG_ERROR, "invalid header\n");
5ae5a74b0e4b better AC3 header error reporting
jbr
parents: 5679
diff changeset
1281 break;
5ae5a74b0e4b better AC3 header error reporting
jbr
parents: 5679
diff changeset
1282 }
5304
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
1283 }
5303
b8821ff5c30d AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff changeset
1284
6889
ff5fd5a1abf5 safer solution for setting audio parameters
jbr
parents: 6886
diff changeset
1285 /* if frame is ok, set audio parameters */
ff5fd5a1abf5 safer solution for setting audio parameters
jbr
parents: 6886
diff changeset
1286 if (!err) {
6885
5554f5ab2c19 cosmetics: indent
jbr
parents: 6884
diff changeset
1287 avctx->sample_rate = s->sample_rate;
5554f5ab2c19 cosmetics: indent
jbr
parents: 6884
diff changeset
1288 avctx->bit_rate = s->bit_rate;
6098
b7905ea98b8f add crc check to ac3 decoder
jbr
parents: 6095
diff changeset
1289
6885
5554f5ab2c19 cosmetics: indent
jbr
parents: 6884
diff changeset
1290 /* channel config */
5554f5ab2c19 cosmetics: indent
jbr
parents: 6884
diff changeset
1291 s->out_channels = s->channels;
6889
ff5fd5a1abf5 safer solution for setting audio parameters
jbr
parents: 6886
diff changeset
1292 s->output_mode = s->channel_mode;
ff5fd5a1abf5 safer solution for setting audio parameters
jbr
parents: 6886
diff changeset
1293 if(s->lfe_on)
ff5fd5a1abf5 safer solution for setting audio parameters
jbr
parents: 6886
diff changeset
1294 s->output_mode |= AC3_OUTPUT_LFEON;
6885
5554f5ab2c19 cosmetics: indent
jbr
parents: 6884
diff changeset
1295 if (avctx->request_channels > 0 && avctx->request_channels <= 2 &&
5554f5ab2c19 cosmetics: indent
jbr
parents: 6884
diff changeset
1296 avctx->request_channels < s->channels) {
5554f5ab2c19 cosmetics: indent
jbr
parents: 6884
diff changeset
1297 s->out_channels = avctx->request_channels;
5554f5ab2c19 cosmetics: indent
jbr
parents: 6884
diff changeset
1298 s->output_mode = avctx->request_channels == 1 ? AC3_CHMODE_MONO : AC3_CHMODE_STEREO;
9512
ba5d9a97ab2f Add channel layout support to the AC-3 decoder and AC-3 parser.
jbr
parents: 9454
diff changeset
1299 s->channel_layout = ff_ac3_channel_layout_tab[s->output_mode];
6885
5554f5ab2c19 cosmetics: indent
jbr
parents: 6884
diff changeset
1300 }
5554f5ab2c19 cosmetics: indent
jbr
parents: 6884
diff changeset
1301 avctx->channels = s->out_channels;
9512
ba5d9a97ab2f Add channel layout support to the AC-3 decoder and AC-3 parser.
jbr
parents: 9454
diff changeset
1302 avctx->channel_layout = s->channel_layout;
5303
b8821ff5c30d AC-3 decoder, soc revision 9, Jun 14 03:52:02 2006 UTC by cloud9
jbr
parents:
diff changeset
1303
6885
5554f5ab2c19 cosmetics: indent
jbr
parents: 6884
diff changeset
1304 /* set downmixing coefficients if needed */
5554f5ab2c19 cosmetics: indent
jbr
parents: 6884
diff changeset
1305 if(s->channels != s->out_channels && !((s->output_mode & AC3_OUTPUT_LFEON) &&
5554f5ab2c19 cosmetics: indent
jbr
parents: 6884
diff changeset
1306 s->fbw_channels == s->out_channels)) {
5554f5ab2c19 cosmetics: indent
jbr
parents: 6884
diff changeset
1307 set_downmix_coeffs(s);
5554f5ab2c19 cosmetics: indent
jbr
parents: 6884
diff changeset
1308 }
6889
ff5fd5a1abf5 safer solution for setting audio parameters
jbr
parents: 6886
diff changeset
1309 } else if (!s->out_channels) {
ff5fd5a1abf5 safer solution for setting audio parameters
jbr
parents: 6886
diff changeset
1310 s->out_channels = avctx->channels;
ff5fd5a1abf5 safer solution for setting audio parameters
jbr
parents: 6886
diff changeset
1311 if(s->out_channels < s->channels)
ff5fd5a1abf5 safer solution for setting audio parameters
jbr
parents: 6886
diff changeset
1312 s->output_mode = s->out_channels == 1 ? AC3_CHMODE_MONO : AC3_CHMODE_STEREO;
6884
a790b3ee61b9 add error concealment
jbr
parents: 6872
diff changeset
1313 }
6126
c24cd5282108 split out init of downmix coeffs into a separate function that can be called
jbr
parents: 6125
diff changeset
1314
7490
bddd15a1d167 cosmetics: change function name and comments to refer to block decoding
jbr
parents: 7489
diff changeset
1315 /* decode the audio blocks */
9454
7db61b0d21f9 ac3dec: reorder output channels to SMPTE channel order
jbr
parents: 9355
diff changeset
1316 channel_map = ff_ac3_dec_channel_map[s->output_mode & ~AC3_OUTPUT_LFEON][s->lfe_on];
9606
31090f08314e cosmetics: indentation after last commit
jbr
parents: 9605
diff changeset
1317 for (ch = 0; ch < s->out_channels; ch++)
31090f08314e cosmetics: indentation after last commit
jbr
parents: 9605
diff changeset
1318 output[ch] = s->output[channel_map[ch]];
7011
77f607fb4e8b get the number of blocks from the ac3 parser and use in the ac3 decoder.
jbr
parents: 6999
diff changeset
1319 for (blk = 0; blk < s->num_blocks; blk++) {
7490
bddd15a1d167 cosmetics: change function name and comments to refer to block decoding
jbr
parents: 7489
diff changeset
1320 if (!err && decode_audio_block(s, blk)) {
bddd15a1d167 cosmetics: change function name and comments to refer to block decoding
jbr
parents: 7489
diff changeset
1321 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
1322 err = 1;
5304
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
1323 }
7550
f9e4afa46993 use float_to_int16_interleave in ac3
lorenm
parents: 7549
diff changeset
1324 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
1325 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
1326 }
7011
77f607fb4e8b get the number of blocks from the ac3 parser and use in the ac3 decoder.
jbr
parents: 6999
diff changeset
1327 *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
1328 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
1329 }
5304
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
1330
5515
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
1331 /**
b499866a3397 comments modification: add, clean up, Doxygenize, and reword
jbr
parents: 5499
diff changeset
1332 * 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
1333 */
6517
48759bfbd073 Apply 'cold' attribute to init/uninit functions in libavcodec
zuxy
parents: 6487
diff changeset
1334 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
1335 {
6092
42bdc549a500 do not need to cast a (void *)
jbr
parents: 6091
diff changeset
1336 AC3DecodeContext *s = avctx->priv_data;
6090
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
1337 ff_mdct_end(&s->imdct_512);
b7b19fbc4746 cosmetics: rename all AC3DecodeContext variables from ctx to s
jbr
parents: 6089
diff changeset
1338 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
1339
6538
b8f886bce6f5 only allocate context input buffer if AVCodecContext.error_reslience is greater than 0.
jbr
parents: 6537
diff changeset
1340 av_freep(&s->input_buffer);
b8f886bce6f5 only allocate context input buffer if AVCodecContext.error_reslience is greater than 0.
jbr
parents: 6537
diff changeset
1341
5304
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
1342 return 0;
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
1343 }
eff51058fe13 AC-3 decoder, soc revision 26, Jul 5 04:55:15 2006 UTC by cloud9
jbr
parents: 5303
diff changeset
1344
5334
d406baea3275 no need for the decoder to have the license as a prefix
jbr
parents: 5333
diff changeset
1345 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
1346 .name = "ac3",
31033309ebc9 AC-3 decoder, soc revision 55, Aug 17 12:25:24 2006 UTC by cloud9
jbr
parents: 5314
diff changeset
1347 .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
1348 .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
1349 .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
1350 .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
1351 .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
1352 .decode = ac3_decode_frame,
7769
e5f7a43f63ae create a separate codec_id for E-AC-3
jbr
parents: 7756
diff changeset
1353 .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
1354 };
7769
e5f7a43f63ae create a separate codec_id for E-AC-3
jbr
parents: 7756
diff changeset
1355
9982
daa53251c64d Make sure that eac3_decoder only gets enabled when CONFIG_EAC3_DECODER is set.
diego
parents: 9891
diff changeset
1356 #if CONFIG_EAC3_DECODER
7769
e5f7a43f63ae create a separate codec_id for E-AC-3
jbr
parents: 7756
diff changeset
1357 AVCodec eac3_decoder = {
e5f7a43f63ae create a separate codec_id for E-AC-3
jbr
parents: 7756
diff changeset
1358 .name = "eac3",
e5f7a43f63ae create a separate codec_id for E-AC-3
jbr
parents: 7756
diff changeset
1359 .type = CODEC_TYPE_AUDIO,
e5f7a43f63ae create a separate codec_id for E-AC-3
jbr
parents: 7756
diff changeset
1360 .id = CODEC_ID_EAC3,
e5f7a43f63ae create a separate codec_id for E-AC-3
jbr
parents: 7756
diff changeset
1361 .priv_data_size = sizeof (AC3DecodeContext),
e5f7a43f63ae create a separate codec_id for E-AC-3
jbr
parents: 7756
diff changeset
1362 .init = ac3_decode_init,
e5f7a43f63ae create a separate codec_id for E-AC-3
jbr
parents: 7756
diff changeset
1363 .close = ac3_decode_end,
e5f7a43f63ae create a separate codec_id for E-AC-3
jbr
parents: 7756
diff changeset
1364 .decode = ac3_decode_frame,
e5f7a43f63ae create a separate codec_id for E-AC-3
jbr
parents: 7756
diff changeset
1365 .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
1366 };
9982
daa53251c64d Make sure that eac3_decoder only gets enabled when CONFIG_EAC3_DECODER is set.
diego
parents: 9891
diff changeset
1367 #endif