blob: dd8b66c7bbc874439703701e0d3efb54a36ae3ca
1 | /* |
2 | * AAC Spectral Band Replication function declarations |
3 | * Copyright (c) 2008-2009 Robert Swain ( rob opendot cl ) |
4 | * Copyright (c) 2010 Alex Converse <alex.converse@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 Spectral Band Replication function declarations |
26 | * @author Robert Swain ( rob opendot cl ) |
27 | */ |
28 | |
29 | #ifndef AVCODEC_AACSBR_H |
30 | #define AVCODEC_AACSBR_H |
31 | |
32 | #include "get_bits.h" |
33 | #include "aac.h" |
34 | #include "sbr.h" |
35 | |
36 | #define ENVELOPE_ADJUSTMENT_OFFSET 2 |
37 | #define NOISE_FLOOR_OFFSET 6 |
38 | |
39 | /** |
40 | * SBR VLC tables |
41 | */ |
42 | enum { |
43 | T_HUFFMAN_ENV_1_5DB, |
44 | F_HUFFMAN_ENV_1_5DB, |
45 | T_HUFFMAN_ENV_BAL_1_5DB, |
46 | F_HUFFMAN_ENV_BAL_1_5DB, |
47 | T_HUFFMAN_ENV_3_0DB, |
48 | F_HUFFMAN_ENV_3_0DB, |
49 | T_HUFFMAN_ENV_BAL_3_0DB, |
50 | F_HUFFMAN_ENV_BAL_3_0DB, |
51 | T_HUFFMAN_NOISE_3_0DB, |
52 | T_HUFFMAN_NOISE_BAL_3_0DB, |
53 | }; |
54 | |
55 | /** |
56 | * bs_frame_class - frame class of current SBR frame (14496-3 sp04 p98) |
57 | */ |
58 | enum { |
59 | FIXFIX, |
60 | FIXVAR, |
61 | VARFIX, |
62 | VARVAR, |
63 | }; |
64 | |
65 | enum { |
66 | EXTENSION_ID_PS = 2, |
67 | }; |
68 | |
69 | static const int8_t vlc_sbr_lav[10] = |
70 | { 60, 60, 24, 24, 31, 31, 12, 12, 31, 12 }; |
71 | |
72 | #define SBR_INIT_VLC_STATIC(num, size) \ |
73 | INIT_VLC_STATIC(&vlc_sbr[num], 9, sbr_tmp[num].table_size / sbr_tmp[num].elem_size, \ |
74 | sbr_tmp[num].sbr_bits , 1, 1, \ |
75 | sbr_tmp[num].sbr_codes, sbr_tmp[num].elem_size, sbr_tmp[num].elem_size, \ |
76 | size) |
77 | |
78 | #define SBR_VLC_ROW(name) \ |
79 | { name ## _codes, name ## _bits, sizeof(name ## _codes), sizeof(name ## _codes[0]) } |
80 | |
81 | /** Initialize SBR. */ |
82 | void AAC_RENAME(ff_aac_sbr_init)(void); |
83 | /** Initialize one SBR context. */ |
84 | void AAC_RENAME(ff_aac_sbr_ctx_init)(AACContext *ac, SpectralBandReplication *sbr, int id_aac); |
85 | /** Close one SBR context. */ |
86 | void AAC_RENAME(ff_aac_sbr_ctx_close)(SpectralBandReplication *sbr); |
87 | /** Decode one SBR element. */ |
88 | int AAC_RENAME(ff_decode_sbr_extension)(AACContext *ac, SpectralBandReplication *sbr, |
89 | GetBitContext *gb, int crc, int cnt, int id_aac); |
90 | /** Apply one SBR element to one AAC element. */ |
91 | void AAC_RENAME(ff_sbr_apply)(AACContext *ac, SpectralBandReplication *sbr, int id_aac, |
92 | INTFLOAT* L, INTFLOAT *R); |
93 | |
94 | void ff_aacsbr_func_ptr_init_mips(AACSBRContext *c); |
95 | |
96 | #endif /* AVCODEC_AACSBR_H */ |
97 |