Line | Branch | Exec | Source |
---|---|---|---|
1 | /* | ||
2 | * AAC definitions and structures | ||
3 | * Copyright (c) 2005-2006 Oded Shimon ( ods15 ods15 dyndns org ) | ||
4 | * Copyright (c) 2006-2007 Maxim Gavrilov ( maxim.gavrilov gmail com ) | ||
5 | * | ||
6 | * This file is part of FFmpeg. | ||
7 | * | ||
8 | * FFmpeg is free software; you can redistribute it and/or | ||
9 | * modify it under the terms of the GNU Lesser General Public | ||
10 | * License as published by the Free Software Foundation; either | ||
11 | * version 2.1 of the License, or (at your option) any later version. | ||
12 | * | ||
13 | * FFmpeg is distributed in the hope that it will be useful, | ||
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
16 | * Lesser General Public License for more details. | ||
17 | * | ||
18 | * You should have received a copy of the GNU Lesser General Public | ||
19 | * License along with FFmpeg; if not, write to the Free Software | ||
20 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | ||
21 | */ | ||
22 | |||
23 | /** | ||
24 | * @file | ||
25 | * AAC definitions and structures | ||
26 | * @author Oded Shimon ( ods15 ods15 dyndns org ) | ||
27 | * @author Maxim Gavrilov ( maxim.gavrilov gmail com ) | ||
28 | */ | ||
29 | |||
30 | #ifndef AVCODEC_AAC_H | ||
31 | #define AVCODEC_AAC_H | ||
32 | |||
33 | #define MAX_CHANNELS 64 | ||
34 | #define MAX_ELEM_ID 64 | ||
35 | |||
36 | #define TNS_MAX_ORDER 20 | ||
37 | #define MAX_LTP_LONG_SFB 40 | ||
38 | |||
39 | enum RawDataBlockType { | ||
40 | TYPE_SCE, | ||
41 | TYPE_CPE, | ||
42 | TYPE_CCE, | ||
43 | TYPE_LFE, | ||
44 | TYPE_DSE, | ||
45 | TYPE_PCE, | ||
46 | TYPE_FIL, | ||
47 | TYPE_END, | ||
48 | }; | ||
49 | |||
50 | enum ExtensionPayloadID { | ||
51 | EXT_FILL, | ||
52 | EXT_FILL_DATA, | ||
53 | EXT_DATA_ELEMENT, | ||
54 | EXT_DYNAMIC_RANGE = 0xb, | ||
55 | EXT_SBR_DATA = 0xd, | ||
56 | EXT_SBR_DATA_CRC = 0xe, | ||
57 | }; | ||
58 | |||
59 | enum WindowSequence { | ||
60 | ONLY_LONG_SEQUENCE, | ||
61 | LONG_START_SEQUENCE, | ||
62 | EIGHT_SHORT_SEQUENCE, | ||
63 | LONG_STOP_SEQUENCE, | ||
64 | }; | ||
65 | |||
66 | enum BandType { | ||
67 | ZERO_BT = 0, ///< Scalefactors and spectral data are all zero. | ||
68 | FIRST_PAIR_BT = 5, ///< This and later band types encode two values (rather than four) with one code word. | ||
69 | ESC_BT = 11, ///< Spectral data are coded with an escape sequence. | ||
70 | RESERVED_BT = 12, ///< Band types following are encoded differently from others. | ||
71 | NOISE_BT = 13, ///< Spectral data are scaled white noise not coded in the bitstream. | ||
72 | INTENSITY_BT2 = 14, ///< Scalefactor data are intensity stereo positions (out of phase). | ||
73 | INTENSITY_BT = 15, ///< Scalefactor data are intensity stereo positions (in phase). | ||
74 | }; | ||
75 | |||
76 | enum ChannelPosition { | ||
77 | AAC_CHANNEL_OFF = 0, | ||
78 | AAC_CHANNEL_FRONT = 1, | ||
79 | AAC_CHANNEL_SIDE = 2, | ||
80 | AAC_CHANNEL_BACK = 3, | ||
81 | AAC_CHANNEL_LFE = 4, | ||
82 | AAC_CHANNEL_CC = 5, | ||
83 | }; | ||
84 | |||
85 | #define MAX_PREDICTORS 672 | ||
86 | |||
87 | #define SCALE_DIV_512 36 ///< scalefactor difference that corresponds to scale difference in 512 times | ||
88 | #define SCALE_ONE_POS 140 ///< scalefactor index that corresponds to scale=1.0 | ||
89 | #define SCALE_MAX_POS 255 ///< scalefactor index maximum value | ||
90 | #define SCALE_MAX_DIFF 60 ///< maximum scalefactor difference allowed by standard | ||
91 | #define SCALE_DIFF_ZERO 60 ///< codebook index corresponding to zero scalefactor indices difference | ||
92 | |||
93 | #define POW_SF2_ZERO 200 ///< ff_aac_pow2sf_tab index corresponding to pow(2, 0); | ||
94 | |||
95 | #define NOISE_PRE 256 ///< preamble for NOISE_BT, put in bitstream with the first noise band | ||
96 | #define NOISE_PRE_BITS 9 ///< length of preamble | ||
97 | #define NOISE_OFFSET 90 ///< subtracted from global gain, used as offset for the preamble | ||
98 | |||
99 | typedef struct Pulse { | ||
100 | int num_pulse; | ||
101 | int start; | ||
102 | int pos[4]; | ||
103 | int amp[4]; | ||
104 | } Pulse; | ||
105 | |||
106 | 66 | static inline int ff_aac_sample_rate_idx(int rate) | |
107 | { | ||
108 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 66 times.
|
66 | if (92017 <= rate) return 0; |
109 |
2/2✓ Branch 0 taken 2 times.
✓ Branch 1 taken 64 times.
|
66 | else if (75132 <= rate) return 1; |
110 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 64 times.
|
64 | else if (55426 <= rate) return 2; |
111 |
2/2✓ Branch 0 taken 1 times.
✓ Branch 1 taken 63 times.
|
64 | else if (46009 <= rate) return 3; |
112 |
2/2✓ Branch 0 taken 18 times.
✓ Branch 1 taken 45 times.
|
63 | else if (37566 <= rate) return 4; |
113 |
2/2✓ Branch 0 taken 3 times.
✓ Branch 1 taken 42 times.
|
45 | else if (27713 <= rate) return 5; |
114 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 42 times.
|
42 | else if (23004 <= rate) return 6; |
115 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 42 times.
|
42 | else if (18783 <= rate) return 7; |
116 |
2/2✓ Branch 0 taken 4 times.
✓ Branch 1 taken 38 times.
|
42 | else if (13856 <= rate) return 8; |
117 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 38 times.
|
38 | else if (11502 <= rate) return 9; |
118 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 38 times.
|
38 | else if (9391 <= rate) return 10; |
119 | 38 | else return 11; | |
120 | } | ||
121 | |||
122 | #endif /* AVCODEC_AAC_H */ | ||
123 |