annotate mpegaudio.h @ 4301:b43bd0c56eaa libavcodec

Bug fix for crashes when SSE is used on unaligned arrays. No measureable change in speed. This gave random crashes on Win32 and BeOS. The cause for this bug is that gcc doesn't align the stackframe. Linux and glibc always ensure this to be true thus this never affected Linux.
author banan
date Thu, 14 Dec 2006 17:50:23 +0000
parents 04ff8026d9c0
children 70f194a2ee53
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
1e39f273ecd6 per file doxy
michaelni
parents: 1064
diff changeset
21 /**
1e39f273ecd6 per file doxy
michaelni
parents: 1064
diff changeset
22 * @file mpegaudio.h
1e39f273ecd6 per file doxy
michaelni
parents: 1064
diff changeset
23 * mpeg audio declarations for both encoder and decoder.
1e39f273ecd6 per file doxy
michaelni
parents: 1064
diff changeset
24 */
84
608c7f964bca merged code and tables between encoder and decoder
glantau
parents: 64
diff changeset
25
608c7f964bca merged code and tables between encoder and decoder
glantau
parents: 64
diff changeset
26 /* max frame size, in samples */
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2913
diff changeset
27 #define MPA_FRAME_SIZE 1152
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
28
986e461dc072 Initial revision
glantau
parents:
diff changeset
29 /* max compressed frame size */
84
608c7f964bca merged code and tables between encoder and decoder
glantau
parents: 64
diff changeset
30 #define MPA_MAX_CODED_FRAME_SIZE 1792
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
31
986e461dc072 Initial revision
glantau
parents:
diff changeset
32 #define MPA_MAX_CHANNELS 2
986e461dc072 Initial revision
glantau
parents:
diff changeset
33
986e461dc072 Initial revision
glantau
parents:
diff changeset
34 #define SBLIMIT 32 /* number of subbands */
84
608c7f964bca merged code and tables between encoder and decoder
glantau
parents: 64
diff changeset
35
608c7f964bca merged code and tables between encoder and decoder
glantau
parents: 64
diff changeset
36 #define MPA_STEREO 0
608c7f964bca merged code and tables between encoder and decoder
glantau
parents: 64
diff changeset
37 #define MPA_JSTEREO 1
608c7f964bca merged code and tables between encoder and decoder
glantau
parents: 64
diff changeset
38 #define MPA_DUAL 2
608c7f964bca merged code and tables between encoder and decoder
glantau
parents: 64
diff changeset
39 #define MPA_MONO 3
608c7f964bca merged code and tables between encoder and decoder
glantau
parents: 64
diff changeset
40
2472
021dc26e760f dithering for the mpeg audio decoder
michael
parents: 1612
diff changeset
41 /* header + layer + bitrate + freq + lsf/mpeg25 */
021dc26e760f dithering for the mpeg audio decoder
michael
parents: 1612
diff changeset
42 #define SAME_HEADER_MASK \
021dc26e760f dithering for the mpeg audio decoder
michael
parents: 1612
diff changeset
43 (0xffe00000 | (3 << 17) | (0xf << 12) | (3 << 10) | (3 << 19))
021dc26e760f dithering for the mpeg audio decoder
michael
parents: 1612
diff changeset
44
2913
cc55bc1f8d92 QDM2 compatible decoder
rtognimp
parents: 2472
diff changeset
45 /* define USE_HIGHPRECISION to have a bit exact (but slower) mpeg
cc55bc1f8d92 QDM2 compatible decoder
rtognimp
parents: 2472
diff changeset
46 audio decoder */
cc55bc1f8d92 QDM2 compatible decoder
rtognimp
parents: 2472
diff changeset
47
cc55bc1f8d92 QDM2 compatible decoder
rtognimp
parents: 2472
diff changeset
48 #ifdef USE_HIGHPRECISION
cc55bc1f8d92 QDM2 compatible decoder
rtognimp
parents: 2472
diff changeset
49 #define FRAC_BITS 23 /* fractional bits for sb_samples and dct */
cc55bc1f8d92 QDM2 compatible decoder
rtognimp
parents: 2472
diff changeset
50 #define WFRAC_BITS 16 /* fractional bits for window */
cc55bc1f8d92 QDM2 compatible decoder
rtognimp
parents: 2472
diff changeset
51 #else
cc55bc1f8d92 QDM2 compatible decoder
rtognimp
parents: 2472
diff changeset
52 #define FRAC_BITS 15 /* fractional bits for sb_samples and dct */
cc55bc1f8d92 QDM2 compatible decoder
rtognimp
parents: 2472
diff changeset
53 #define WFRAC_BITS 14 /* fractional bits for window */
cc55bc1f8d92 QDM2 compatible decoder
rtognimp
parents: 2472
diff changeset
54 #endif
cc55bc1f8d92 QDM2 compatible decoder
rtognimp
parents: 2472
diff changeset
55
cc55bc1f8d92 QDM2 compatible decoder
rtognimp
parents: 2472
diff changeset
56 #if defined(USE_HIGHPRECISION) && defined(CONFIG_AUDIO_NONSHORT)
cc55bc1f8d92 QDM2 compatible decoder
rtognimp
parents: 2472
diff changeset
57 typedef int32_t OUT_INT;
cc55bc1f8d92 QDM2 compatible decoder
rtognimp
parents: 2472
diff changeset
58 #define OUT_MAX INT32_MAX
cc55bc1f8d92 QDM2 compatible decoder
rtognimp
parents: 2472
diff changeset
59 #define OUT_MIN INT32_MIN
cc55bc1f8d92 QDM2 compatible decoder
rtognimp
parents: 2472
diff changeset
60 #define OUT_SHIFT (WFRAC_BITS + FRAC_BITS - 31)
cc55bc1f8d92 QDM2 compatible decoder
rtognimp
parents: 2472
diff changeset
61 #else
cc55bc1f8d92 QDM2 compatible decoder
rtognimp
parents: 2472
diff changeset
62 typedef int16_t OUT_INT;
cc55bc1f8d92 QDM2 compatible decoder
rtognimp
parents: 2472
diff changeset
63 #define OUT_MAX INT16_MAX
cc55bc1f8d92 QDM2 compatible decoder
rtognimp
parents: 2472
diff changeset
64 #define OUT_MIN INT16_MIN
cc55bc1f8d92 QDM2 compatible decoder
rtognimp
parents: 2472
diff changeset
65 #define OUT_SHIFT (WFRAC_BITS + FRAC_BITS - 15)
cc55bc1f8d92 QDM2 compatible decoder
rtognimp
parents: 2472
diff changeset
66 #endif
cc55bc1f8d92 QDM2 compatible decoder
rtognimp
parents: 2472
diff changeset
67
cc55bc1f8d92 QDM2 compatible decoder
rtognimp
parents: 2472
diff changeset
68 #if FRAC_BITS <= 15
cc55bc1f8d92 QDM2 compatible decoder
rtognimp
parents: 2472
diff changeset
69 typedef int16_t MPA_INT;
cc55bc1f8d92 QDM2 compatible decoder
rtognimp
parents: 2472
diff changeset
70 #else
cc55bc1f8d92 QDM2 compatible decoder
rtognimp
parents: 2472
diff changeset
71 typedef int32_t MPA_INT;
cc55bc1f8d92 QDM2 compatible decoder
rtognimp
parents: 2472
diff changeset
72 #endif
cc55bc1f8d92 QDM2 compatible decoder
rtognimp
parents: 2472
diff changeset
73
84
608c7f964bca merged code and tables between encoder and decoder
glantau
parents: 64
diff changeset
74 int l2_select_table(int bitrate, int nb_channels, int freq, int lsf);
4104
04ff8026d9c0 dont set the sampling rate just because 1 mp3 packet header says so (fixes playback speed on some old mencoder generated avis which where then dumped to mp3)
michael
parents: 3947
diff changeset
75 int mpa_decode_header(AVCodecContext *avctx, uint32_t head, int *sample_rate);
2913
cc55bc1f8d92 QDM2 compatible decoder
rtognimp
parents: 2472
diff changeset
76 void ff_mpa_synth_init(MPA_INT *window);
cc55bc1f8d92 QDM2 compatible decoder
rtognimp
parents: 2472
diff changeset
77 void ff_mpa_synth_filter(MPA_INT *synth_buf_ptr, int *synth_buf_offset,
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
78 MPA_INT *window, int *dither_state,
2913
cc55bc1f8d92 QDM2 compatible decoder
rtognimp
parents: 2472
diff changeset
79 OUT_INT *samples, int incr,
cc55bc1f8d92 QDM2 compatible decoder
rtognimp
parents: 2472
diff changeset
80 int32_t sb_samples[SBLIMIT]);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
81
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 472
diff changeset
82 extern const uint16_t mpa_bitrate_tab[2][3][15];
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 472
diff changeset
83 extern const uint16_t mpa_freq_tab[3];
84
608c7f964bca merged code and tables between encoder and decoder
glantau
parents: 64
diff changeset
84 extern const unsigned char *alloc_tables[5];
608c7f964bca merged code and tables between encoder and decoder
glantau
parents: 64
diff changeset
85 extern const double enwindow[512];
608c7f964bca merged code and tables between encoder and decoder
glantau
parents: 64
diff changeset
86 extern const int sblimit_table[5];
608c7f964bca merged code and tables between encoder and decoder
glantau
parents: 64
diff changeset
87 extern const int quant_steps[17];
608c7f964bca merged code and tables between encoder and decoder
glantau
parents: 64
diff changeset
88 extern const int quant_bits[17];
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 472
diff changeset
89 extern const int32_t mpa_enwindow[257];
2472
021dc26e760f dithering for the mpeg audio decoder
michael
parents: 1612
diff changeset
90
021dc26e760f dithering for the mpeg audio decoder
michael
parents: 1612
diff changeset
91 /* fast header check for resync */
021dc26e760f dithering for the mpeg audio decoder
michael
parents: 1612
diff changeset
92 static inline int ff_mpa_check_header(uint32_t header){
021dc26e760f dithering for the mpeg audio decoder
michael
parents: 1612
diff changeset
93 /* header */
021dc26e760f dithering for the mpeg audio decoder
michael
parents: 1612
diff changeset
94 if ((header & 0xffe00000) != 0xffe00000)
021dc26e760f dithering for the mpeg audio decoder
michael
parents: 1612
diff changeset
95 return -1;
021dc26e760f dithering for the mpeg audio decoder
michael
parents: 1612
diff changeset
96 /* layer check */
021dc26e760f dithering for the mpeg audio decoder
michael
parents: 1612
diff changeset
97 if ((header & (3<<17)) == 0)
021dc26e760f dithering for the mpeg audio decoder
michael
parents: 1612
diff changeset
98 return -1;
021dc26e760f dithering for the mpeg audio decoder
michael
parents: 1612
diff changeset
99 /* bit rate */
021dc26e760f dithering for the mpeg audio decoder
michael
parents: 1612
diff changeset
100 if ((header & (0xf<<12)) == 0xf<<12)
021dc26e760f dithering for the mpeg audio decoder
michael
parents: 1612
diff changeset
101 return -1;
021dc26e760f dithering for the mpeg audio decoder
michael
parents: 1612
diff changeset
102 /* frequency */
021dc26e760f dithering for the mpeg audio decoder
michael
parents: 1612
diff changeset
103 if ((header & (3<<10)) == 3<<10)
021dc26e760f dithering for the mpeg audio decoder
michael
parents: 1612
diff changeset
104 return -1;
021dc26e760f dithering for the mpeg audio decoder
michael
parents: 1612
diff changeset
105 return 0;
021dc26e760f dithering for the mpeg audio decoder
michael
parents: 1612
diff changeset
106 }