Main Page
Related Pages
Modules
Data Structures
Files
Examples
File List
Globals
libavcodec
ac3.h
Go to the documentation of this file.
1
/*
2
* Common code between the AC-3 encoder and decoder
3
* Copyright (c) 2000, 2001, 2002 Fabrice Bellard
4
*
5
* This file is part of Libav.
6
*
7
* Libav 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
* Libav 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 Libav; if not, write to the Free Software
19
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20
*/
21
27
#ifndef AVCODEC_AC3_H
28
#define AVCODEC_AC3_H
29
30
#define AC3_MAX_CODED_FRAME_SIZE 3840
/* in bytes */
31
#define AC3_MAX_CHANNELS 7
32
#define CPL_CH 0
34
#define AC3_MAX_COEFS 256
35
#define AC3_BLOCK_SIZE 256
36
#define AC3_MAX_BLOCKS 6
37
#define AC3_FRAME_SIZE (AC3_MAX_BLOCKS * 256)
38
#define AC3_WINDOW_SIZE (AC3_BLOCK_SIZE * 2)
39
#define AC3_CRITICAL_BANDS 50
40
#define AC3_MAX_CPL_BANDS 18
41
42
#include "
ac3tab.h
"
43
44
/* exponent encoding strategy */
45
#define EXP_REUSE 0
46
#define EXP_NEW 1
47
48
#define EXP_D15 1
49
#define EXP_D25 2
50
#define EXP_D45 3
51
52
/* pre-defined gain values */
53
#define LEVEL_PLUS_3DB 1.4142135623730950
54
#define LEVEL_PLUS_1POINT5DB 1.1892071150027209
55
#define LEVEL_MINUS_1POINT5DB 0.8408964152537145
56
#define LEVEL_MINUS_3DB 0.7071067811865476
57
#define LEVEL_MINUS_4POINT5DB 0.5946035575013605
58
#define LEVEL_MINUS_6DB 0.5000000000000000
59
#define LEVEL_MINUS_9DB 0.3535533905932738
60
#define LEVEL_ZERO 0.0000000000000000
61
#define LEVEL_ONE 1.0000000000000000
62
64
typedef
enum
{
65
DBA_REUSE
= 0,
66
DBA_NEW
,
67
DBA_NONE
,
68
DBA_RESERVED
69
}
AC3DeltaStrategy
;
70
72
typedef
enum
{
73
AC3_CHMODE_DUALMONO
= 0,
74
AC3_CHMODE_MONO
,
75
AC3_CHMODE_STEREO
,
76
AC3_CHMODE_3F
,
77
AC3_CHMODE_2F1R
,
78
AC3_CHMODE_3F1R
,
79
AC3_CHMODE_2F2R
,
80
AC3_CHMODE_3F2R
81
}
AC3ChannelMode
;
82
83
typedef
struct
AC3BitAllocParameters
{
84
int
sr_code
;
85
int
sr_shift
;
86
int
slow_gain
,
slow_decay
,
fast_decay
,
db_per_bit
,
floor
;
87
int
cpl_fast_leak
,
cpl_slow_leak
;
88
}
AC3BitAllocParameters
;
89
94
typedef
struct
{
98
uint16_t
sync_word
;
99
uint16_t
crc1
;
100
uint8_t
sr_code
;
101
uint8_t
bitstream_id
;
102
uint8_t
bitstream_mode
;
103
uint8_t
channel_mode
;
104
uint8_t
lfe_on
;
105
uint8_t
frame_type
;
106
int
substreamid
;
107
int
center_mix_level
;
108
int
surround_mix_level
;
109
uint16_t
channel_map
;
110
int
num_blocks
;
111
116
uint8_t
sr_shift
;
117
uint16_t
sample_rate
;
118
uint32_t
bit_rate
;
119
uint8_t
channels
;
120
uint16_t
frame_size
;
121
uint64_t
channel_layout
;
123
}
AC3HeaderInfo
;
124
125
typedef
enum
{
126
EAC3_FRAME_TYPE_INDEPENDENT
= 0,
127
EAC3_FRAME_TYPE_DEPENDENT
,
128
EAC3_FRAME_TYPE_AC3_CONVERT
,
129
EAC3_FRAME_TYPE_RESERVED
130
}
EAC3FrameType
;
131
132
void
ff_ac3_common_init
(
void
);
133
148
void
ff_ac3_bit_alloc_calc_psd
(int8_t *exp,
int
start,
int
end, int16_t *psd,
149
int16_t *band_psd);
150
173
int
ff_ac3_bit_alloc_calc_mask
(
AC3BitAllocParameters
*s, int16_t *band_psd,
174
int
start,
int
end,
int
fast_gain,
int
is_lfe,
175
int
dba_mode,
int
dba_nsegs, uint8_t *dba_offsets,
176
uint8_t *dba_lengths, uint8_t *dba_values,
177
int16_t *
mask
);
178
179
#endif
/* AVCODEC_AC3_H */