Mercurial > libavcodec.hg
annotate mpegaudio.h @ 11034:fd5921186064 libavcodec
Make the fast loop filter path work with unavailable left MBs.
This prevents the issue with having to switch between slow and
fast code paths in each row.
0.5% faster loopfilter for cathedral
author | michael |
---|---|
date | Thu, 28 Jan 2010 02:15:25 +0000 |
parents | 34a65026fa06 |
children | 98970e51365a |
rev | line source |
---|---|
3699
c537a97eec66
Add official LGPL license headers to the files that were missing them.
diego
parents:
2979
diff
changeset
|
1 /* |
c537a97eec66
Add official LGPL license headers to the files that were missing them.
diego
parents:
2979
diff
changeset
|
2 * copyright (c) 2001 Fabrice Bellard |
c537a97eec66
Add official LGPL license headers to the files that were missing them.
diego
parents:
2979
diff
changeset
|
3 * |
3947
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3699
diff
changeset
|
4 * This file is part of FFmpeg. |
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3699
diff
changeset
|
5 * |
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3699
diff
changeset
|
6 * FFmpeg is free software; you can redistribute it and/or |
3699
c537a97eec66
Add official LGPL license headers to the files that were missing them.
diego
parents:
2979
diff
changeset
|
7 * modify it under the terms of the GNU Lesser General Public |
c537a97eec66
Add official LGPL license headers to the files that were missing them.
diego
parents:
2979
diff
changeset
|
8 * License as published by the Free Software Foundation; either |
3947
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3699
diff
changeset
|
9 * version 2.1 of the License, or (at your option) any later version. |
3699
c537a97eec66
Add official LGPL license headers to the files that were missing them.
diego
parents:
2979
diff
changeset
|
10 * |
3947
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3699
diff
changeset
|
11 * FFmpeg is distributed in the hope that it will be useful, |
3699
c537a97eec66
Add official LGPL license headers to the files that were missing them.
diego
parents:
2979
diff
changeset
|
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
c537a97eec66
Add official LGPL license headers to the files that were missing them.
diego
parents:
2979
diff
changeset
|
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
c537a97eec66
Add official LGPL license headers to the files that were missing them.
diego
parents:
2979
diff
changeset
|
14 * Lesser General Public License for more details. |
c537a97eec66
Add official LGPL license headers to the files that were missing them.
diego
parents:
2979
diff
changeset
|
15 * |
c537a97eec66
Add official LGPL license headers to the files that were missing them.
diego
parents:
2979
diff
changeset
|
16 * You should have received a copy of the GNU Lesser General Public |
3947
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3699
diff
changeset
|
17 * License along with FFmpeg; if not, write to the Free Software |
3699
c537a97eec66
Add official LGPL license headers to the files that were missing them.
diego
parents:
2979
diff
changeset
|
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
c537a97eec66
Add official LGPL license headers to the files that were missing them.
diego
parents:
2979
diff
changeset
|
19 */ |
c537a97eec66
Add official LGPL license headers to the files that were missing them.
diego
parents:
2979
diff
changeset
|
20 |
1106 | 21 /** |
8718
e9d9d946f213
Use full internal pathname in doxygen @file directives.
diego
parents:
8641
diff
changeset
|
22 * @file libavcodec/mpegaudio.h |
1106 | 23 * mpeg audio declarations for both encoder and decoder. |
24 */ | |
84 | 25 |
7760 | 26 #ifndef AVCODEC_MPEGAUDIO_H |
27 #define AVCODEC_MPEGAUDIO_H | |
5050 | 28 |
5052
d981eb275c8f
remove dependency of mpeg audio encoder over mpeg audio decoder
aurel
parents:
5051
diff
changeset
|
29 #include "avcodec.h" |
9428 | 30 #include "get_bits.h" |
5050 | 31 #include "dsputil.h" |
32 | |
8600 | 33 #define CONFIG_AUDIO_NONSHORT 0 |
34 | |
84 | 35 /* max frame size, in samples */ |
2967 | 36 #define MPA_FRAME_SIZE 1152 |
0 | 37 |
38 /* max compressed frame size */ | |
84 | 39 #define MPA_MAX_CODED_FRAME_SIZE 1792 |
0 | 40 |
41 #define MPA_MAX_CHANNELS 2 | |
42 | |
43 #define SBLIMIT 32 /* number of subbands */ | |
84 | 44 |
45 #define MPA_STEREO 0 | |
46 #define MPA_JSTEREO 1 | |
47 #define MPA_DUAL 2 | |
48 #define MPA_MONO 3 | |
49 | |
2472 | 50 /* header + layer + bitrate + freq + lsf/mpeg25 */ |
51 #define SAME_HEADER_MASK \ | |
52 (0xffe00000 | (3 << 17) | (0xf << 12) | (3 << 10) | (3 << 19)) | |
53 | |
5033
3c034e71667f
move mp3_header_decompress bitstream filter in its own file
aurel
parents:
5031
diff
changeset
|
54 #define MP3_MASK 0xFFFE0CCF |
3c034e71667f
move mp3_header_decompress bitstream filter in its own file
aurel
parents:
5031
diff
changeset
|
55 |
8594
c5349ca95c08
Replace #ifdef CONFIG_ preprocessor check by #if CONFIG_.
diego
parents:
8592
diff
changeset
|
56 #if CONFIG_MPEGAUDIO_HP |
2913 | 57 #define FRAC_BITS 23 /* fractional bits for sb_samples and dct */ |
58 #define WFRAC_BITS 16 /* fractional bits for window */ | |
59 #else | |
60 #define FRAC_BITS 15 /* fractional bits for sb_samples and dct */ | |
61 #define WFRAC_BITS 14 /* fractional bits for window */ | |
62 #endif | |
63 | |
5161 | 64 #define FRAC_ONE (1 << FRAC_BITS) |
65 | |
66 #define FIX(a) ((int)((a) * FRAC_ONE)) | |
67 | |
8594
c5349ca95c08
Replace #ifdef CONFIG_ preprocessor check by #if CONFIG_.
diego
parents:
8592
diff
changeset
|
68 #if CONFIG_MPEGAUDIO_HP && CONFIG_AUDIO_NONSHORT |
2913 | 69 typedef int32_t OUT_INT; |
70 #define OUT_MAX INT32_MAX | |
71 #define OUT_MIN INT32_MIN | |
72 #define OUT_SHIFT (WFRAC_BITS + FRAC_BITS - 31) | |
8598
6550218be3b7
simplify: group all the AUDIO_NONSHORT parameters in the same place
aurel
parents:
8594
diff
changeset
|
73 #define OUT_FMT SAMPLE_FMT_S32 |
2913 | 74 #else |
75 typedef int16_t OUT_INT; | |
76 #define OUT_MAX INT16_MAX | |
77 #define OUT_MIN INT16_MIN | |
78 #define OUT_SHIFT (WFRAC_BITS + FRAC_BITS - 15) | |
8598
6550218be3b7
simplify: group all the AUDIO_NONSHORT parameters in the same place
aurel
parents:
8594
diff
changeset
|
79 #define OUT_FMT SAMPLE_FMT_S16 |
2913 | 80 #endif |
81 | |
82 #if FRAC_BITS <= 15 | |
83 typedef int16_t MPA_INT; | |
84 #else | |
85 typedef int32_t MPA_INT; | |
86 #endif | |
87 | |
5050 | 88 #define BACKSTEP_SIZE 512 |
89 #define EXTRABYTES 24 | |
90 | |
10494 | 91 /* layer 3 "granule" */ |
92 typedef struct GranuleDef { | |
93 uint8_t scfsi; | |
94 int part2_3_length; | |
95 int big_values; | |
96 int global_gain; | |
97 int scalefac_compress; | |
98 uint8_t block_type; | |
99 uint8_t switch_point; | |
100 int table_select[3]; | |
101 int subblock_gain[3]; | |
102 uint8_t scalefac_scale; | |
103 uint8_t count1table_select; | |
104 int region_size[3]; /* number of huffman codes in each region */ | |
105 int preflag; | |
106 int short_start, long_end; /* long/short band indexes */ | |
107 uint8_t scale_factors[40]; | |
108 int32_t sb_hybrid[SBLIMIT * 18]; /* 576 samples */ | |
109 } GranuleDef; | |
5050 | 110 |
8641 | 111 #define MPA_DECODE_HEADER \ |
112 int frame_size; \ | |
113 int error_protection; \ | |
114 int layer; \ | |
115 int sample_rate; \ | |
116 int sample_rate_index; /* between 0 and 8 */ \ | |
117 int bit_rate; \ | |
118 int nb_channels; \ | |
119 int mode; \ | |
120 int mode_ext; \ | |
121 int lsf; | |
122 | |
123 typedef struct MPADecodeHeader { | |
124 MPA_DECODE_HEADER | |
125 } MPADecodeHeader; | |
126 | |
5050 | 127 typedef struct MPADecodeContext { |
8641 | 128 MPA_DECODE_HEADER |
10093 | 129 uint8_t last_buf[2*BACKSTEP_SIZE + EXTRABYTES]; |
5050 | 130 int last_buf_size; |
131 /* next header (used in free format parsing) */ | |
132 uint32_t free_format_next_header; | |
133 GetBitContext gb; | |
134 GetBitContext in_gb; | |
10961
34a65026fa06
Move array specifiers outside DECLARE_ALIGNED() invocations
mru
parents:
10494
diff
changeset
|
135 DECLARE_ALIGNED_16(MPA_INT, synth_buf)[MPA_MAX_CHANNELS][512 * 2]; |
5050 | 136 int synth_buf_offset[MPA_MAX_CHANNELS]; |
10961
34a65026fa06
Move array specifiers outside DECLARE_ALIGNED() invocations
mru
parents:
10494
diff
changeset
|
137 DECLARE_ALIGNED_16(int32_t, sb_samples)[MPA_MAX_CHANNELS][36][SBLIMIT]; |
5050 | 138 int32_t mdct_buf[MPA_MAX_CHANNELS][SBLIMIT * 18]; /* previous samples, for layer 3 MDCT */ |
10494 | 139 GranuleDef granules[2][2]; /* Used in Layer 3 */ |
5050 | 140 #ifdef DEBUG |
141 int frame_count; | |
142 #endif | |
143 void (*compute_antialias)(struct MPADecodeContext *s, struct GranuleDef *g); | |
144 int adu_mode; ///< 0 for standard mp3, 1 for adu formatted mp3 | |
145 int dither_state; | |
7831 | 146 int error_recognition; |
5050 | 147 AVCodecContext* avctx; |
148 } MPADecodeContext; | |
149 | |
5161 | 150 /* layer 3 huffman tables */ |
151 typedef struct HuffTable { | |
152 int xsize; | |
153 const uint8_t *bits; | |
154 const uint16_t *codes; | |
155 } HuffTable; | |
156 | |
5052
d981eb275c8f
remove dependency of mpeg audio encoder over mpeg audio decoder
aurel
parents:
5051
diff
changeset
|
157 int ff_mpa_l2_select_table(int bitrate, int nb_channels, int freq, int lsf); |
8420
2b0d01be134f
Change mpeg audio parser so it only sets frame_size, channels and bit_rate
michael
parents:
7831
diff
changeset
|
158 int ff_mpa_decode_header(AVCodecContext *avctx, uint32_t head, int *sample_rate, int *channels, int *frame_size, int *bitrate); |
10440
899237b1961f
mpegaudiodec, mpc and qdm2 all use the same mpa_synth window, so make
reimar
parents:
10093
diff
changeset
|
159 extern MPA_INT ff_mpa_synth_window[]; |
2913 | 160 void ff_mpa_synth_init(MPA_INT *window); |
161 void ff_mpa_synth_filter(MPA_INT *synth_buf_ptr, int *synth_buf_offset, | |
2979 | 162 MPA_INT *window, int *dither_state, |
2913 | 163 OUT_INT *samples, int incr, |
164 int32_t sb_samples[SBLIMIT]); | |
0 | 165 |
2472 | 166 /* fast header check for resync */ |
167 static inline int ff_mpa_check_header(uint32_t header){ | |
168 /* header */ | |
169 if ((header & 0xffe00000) != 0xffe00000) | |
170 return -1; | |
171 /* layer check */ | |
172 if ((header & (3<<17)) == 0) | |
173 return -1; | |
174 /* bit rate */ | |
175 if ((header & (0xf<<12)) == 0xf<<12) | |
176 return -1; | |
177 /* frequency */ | |
178 if ((header & (3<<10)) == 3<<10) | |
179 return -1; | |
180 return 0; | |
181 } | |
5050 | 182 |
7760 | 183 #endif /* AVCODEC_MPEGAUDIO_H */ |