blob: 48c89a8ba007d0d6c487e0fcf5a10e5fb96c14f1 [file] [log] [blame]
Aurelien Jacobs7adb10b2007-04-25 22:12:511/*
Justin Ruggles14b70622008-08-03 16:42:322 * AC-3 tables
Aurelien Jacobs7adb10b2007-04-25 22:12:513 * copyright (c) 2001 Fabrice Bellard
4 *
5 * This file is part of FFmpeg.
6 *
7 * FFmpeg is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
11 *
12 * FFmpeg is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with FFmpeg; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 */
21
22/**
Diego Biurrunba87f082010-04-20 14:45:3423 * @file
Justin Ruggles14b70622008-08-03 16:42:3224 * tables taken directly from the AC-3 spec.
Aurelien Jacobs7adb10b2007-04-25 22:12:5125 */
26
Justin Rugglesa903f8f2012-11-10 15:00:0027#include "libavutil/channel_layout.h"
Vittorio Giovaradc0c70e2014-03-22 23:34:1328
Aurelien Jacobs7adb10b2007-04-25 22:12:5129#include "ac3tab.h"
30
31/**
32 * Possible frame sizes.
33 * from ATSC A/52 Table 5.18 Frame Size Code Table.
34 */
Justin Ruggles66ecf182007-12-09 03:21:3335const uint16_t ff_ac3_frame_size_tab[38][3] = {
Aurelien Jacobs7adb10b2007-04-25 22:12:5136 { 64, 69, 96 },
37 { 64, 70, 96 },
38 { 80, 87, 120 },
39 { 80, 88, 120 },
40 { 96, 104, 144 },
41 { 96, 105, 144 },
42 { 112, 121, 168 },
43 { 112, 122, 168 },
44 { 128, 139, 192 },
45 { 128, 140, 192 },
46 { 160, 174, 240 },
47 { 160, 175, 240 },
48 { 192, 208, 288 },
49 { 192, 209, 288 },
50 { 224, 243, 336 },
51 { 224, 244, 336 },
52 { 256, 278, 384 },
53 { 256, 279, 384 },
54 { 320, 348, 480 },
55 { 320, 349, 480 },
56 { 384, 417, 576 },
57 { 384, 418, 576 },
58 { 448, 487, 672 },
59 { 448, 488, 672 },
60 { 512, 557, 768 },
61 { 512, 558, 768 },
62 { 640, 696, 960 },
63 { 640, 697, 960 },
64 { 768, 835, 1152 },
65 { 768, 836, 1152 },
66 { 896, 975, 1344 },
67 { 896, 976, 1344 },
68 { 1024, 1114, 1536 },
69 { 1024, 1115, 1536 },
70 { 1152, 1253, 1728 },
71 { 1152, 1254, 1728 },
72 { 1280, 1393, 1920 },
73 { 1280, 1394, 1920 },
74};
75
76/**
Måns Rullgård49bd8e42010-06-30 15:38:0677 * Map audio coding mode (acmod) to number of full-bandwidth channels.
Aurelien Jacobs7adb10b2007-04-25 22:12:5178 * from ATSC A/52 Table 5.8 Audio Coding Mode
79 */
Justin Ruggles66ecf182007-12-09 03:21:3380const uint8_t ff_ac3_channels_tab[8] = {
Aurelien Jacobs7adb10b2007-04-25 22:12:5181 2, 1, 2, 3, 3, 4, 4, 5
82};
83
Justin Rugglesbfeca7b2009-04-19 15:05:3284/**
Michael Niedermayerf1046232013-08-12 17:40:2985 * Table to remap channels from AC-3 order to SMPTE order.
Justin Ruggles95f30192009-04-17 08:43:0486 * [channel_mode][lfe][ch]
87 */
88const uint8_t ff_ac3_dec_channel_map[8][2][6] = {
89 COMMON_CHANNEL_MAP
Justin Ruggles306a1202009-09-19 04:56:2290 { { 0, 1, 2, 3, }, { 0, 1, 4, 2, 3, } },
Justin Ruggles95f30192009-04-17 08:43:0491 { { 0, 2, 1, 3, 4, }, { 0, 2, 1, 5, 3, 4 } },
92};
93
Aurelien Jacobs7adb10b2007-04-25 22:12:5194/* possible frequencies */
Andreas Rheinhardt12a5e042020-04-11 14:11:0195const int ff_ac3_sample_rate_tab[] = { 48000, 44100, 32000, 0 };
Aurelien Jacobs7adb10b2007-04-25 22:12:5196
97/* possible bitrates */
Justin Ruggles66ecf182007-12-09 03:21:3398const uint16_t ff_ac3_bitrate_tab[19] = {
Aurelien Jacobs7adb10b2007-04-25 22:12:5199 32, 40, 48, 56, 64, 80, 96, 112, 128,
100 160, 192, 224, 256, 320, 384, 448, 512, 576, 640
101};
102
Justin Rugglesdc7e07a2011-01-08 23:21:17103/**
104 * Table of bin locations for rematrixing bands
105 * reference: Section 7.5.2 Rematrixing : Frequency Band Definitions
106 */
107const uint8_t ff_ac3_rematrix_band_tab[5] = { 13, 25, 37, 61, 253 };
108
Justin Ruggles7f3a7b52011-05-23 15:45:51109/**
110 * Table E2.16 Default Coupling Banding Structure
111 */
112const uint8_t ff_eac3_default_cpl_band_struct[18] = {
113 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1
114};
115
Justin Ruggles66ecf182007-12-09 03:21:33116const uint8_t ff_ac3_bap_tab[64]= {
Aurelien Jacobs7adb10b2007-04-25 22:12:51117 0, 1, 1, 1, 1, 1, 2, 2, 3, 3,
118 3, 4, 4, 5, 5, 6, 6, 6, 6, 7,
119 7, 7, 7, 8, 8, 8, 8, 9, 9, 9,
120 9, 10, 10, 10, 10, 11, 11, 11, 11, 12,
121 12, 12, 12, 13, 13, 13, 13, 14, 14, 14,
122 14, 14, 14, 14, 14, 15, 15, 15, 15, 15,
123 15, 15, 15, 15,
124};
125
Justin Ruggles66ecf182007-12-09 03:21:33126const uint8_t ff_ac3_slow_decay_tab[4]={
Aurelien Jacobs7adb10b2007-04-25 22:12:51127 0x0f, 0x11, 0x13, 0x15,
128};
129
Justin Ruggles66ecf182007-12-09 03:21:33130const uint8_t ff_ac3_fast_decay_tab[4]={
Aurelien Jacobs7adb10b2007-04-25 22:12:51131 0x3f, 0x53, 0x67, 0x7b,
132};
133
Justin Ruggles66ecf182007-12-09 03:21:33134const uint16_t ff_ac3_slow_gain_tab[4]= {
Aurelien Jacobs7adb10b2007-04-25 22:12:51135 0x540, 0x4d8, 0x478, 0x410,
136};
137
Justin Ruggles66ecf182007-12-09 03:21:33138const uint16_t ff_ac3_db_per_bit_tab[4]= {
Aurelien Jacobs7adb10b2007-04-25 22:12:51139 0x000, 0x700, 0x900, 0xb00,
140};
141
Justin Ruggles66ecf182007-12-09 03:21:33142const int16_t ff_ac3_floor_tab[8]= {
Aurelien Jacobs7adb10b2007-04-25 22:12:51143 0x2f0, 0x2b0, 0x270, 0x230, 0x1f0, 0x170, 0x0f0, 0xf800,
144};
145
Justin Ruggles66ecf182007-12-09 03:21:33146const uint16_t ff_ac3_fast_gain_tab[8]= {
Aurelien Jacobs7adb10b2007-04-25 22:12:51147 0x080, 0x100, 0x180, 0x200, 0x280, 0x300, 0x380, 0x400,
148};
149
Michael Niedermayerfe315fe2018-06-27 12:43:39150const uint64_t ff_eac3_custom_channel_map_locations[16][2] = {
151 { 1, AV_CH_FRONT_LEFT },
152 { 1, AV_CH_FRONT_CENTER },
153 { 1, AV_CH_FRONT_RIGHT },
154 { 1, AV_CH_SIDE_LEFT },
155 { 1, AV_CH_SIDE_RIGHT },
156 { 0, AV_CH_FRONT_LEFT_OF_CENTER | AV_CH_FRONT_RIGHT_OF_CENTER },
157 { 0, AV_CH_BACK_LEFT | AV_CH_BACK_RIGHT },
158 { 0, AV_CH_BACK_CENTER },
159 { 0, AV_CH_TOP_CENTER },
160 { 0, AV_CH_SURROUND_DIRECT_LEFT | AV_CH_SURROUND_DIRECT_RIGHT },
161 { 0, AV_CH_WIDE_LEFT | AV_CH_WIDE_RIGHT },
162 { 0, AV_CH_TOP_FRONT_LEFT | AV_CH_TOP_FRONT_RIGHT},
163 { 0, AV_CH_TOP_FRONT_CENTER },
164 { 0, AV_CH_TOP_BACK_LEFT | AV_CH_TOP_BACK_RIGHT },
165 { 0, AV_CH_LOW_FREQUENCY_2 },
166 { 1, AV_CH_LOW_FREQUENCY },
167};