Mercurial > libavcodec.hg
annotate mpegaudiodec_float.c @ 12454:f4355cd85faa libavcodec
Port latest x264 deblock asm (before they moved to using NV12 as internal
format), LGPL'ed with permission from Jason and Loren. This includes mmx2
code, so remove inline asm from h264dsp_mmx.c accordingly.
author | rbultje |
---|---|
date | Fri, 03 Sep 2010 16:52:46 +0000 |
parents | fb3fcaf3c1b6 |
children |
rev | line source |
---|---|
11707 | 1 /* |
2 * Float MPEG Audio decoder | |
3 * Copyright (c) 2010 Michael Niedermayer | |
4 * | |
5 * This file is part of FFmpeg. | |
6 * | |
7 * FFmpeg 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 * FFmpeg 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 FFmpeg; if not, write to the Free Software | |
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |
20 */ | |
21 | |
22 #define CONFIG_FLOAT 1 | |
23 #include "mpegaudiodec.c" | |
24 | |
11935
5e8770f9d8f1
Move float-specific function to mpegaudiodec_float.c
vitor
parents:
11707
diff
changeset
|
25 void ff_mpa_synth_filter_float(MPADecodeContext *s, float *synth_buf_ptr, |
5e8770f9d8f1
Move float-specific function to mpegaudiodec_float.c
vitor
parents:
11707
diff
changeset
|
26 int *synth_buf_offset, |
5e8770f9d8f1
Move float-specific function to mpegaudiodec_float.c
vitor
parents:
11707
diff
changeset
|
27 float *window, int *dither_state, |
5e8770f9d8f1
Move float-specific function to mpegaudiodec_float.c
vitor
parents:
11707
diff
changeset
|
28 float *samples, int incr, |
5e8770f9d8f1
Move float-specific function to mpegaudiodec_float.c
vitor
parents:
11707
diff
changeset
|
29 float sb_samples[SBLIMIT]) |
5e8770f9d8f1
Move float-specific function to mpegaudiodec_float.c
vitor
parents:
11707
diff
changeset
|
30 { |
5e8770f9d8f1
Move float-specific function to mpegaudiodec_float.c
vitor
parents:
11707
diff
changeset
|
31 float *synth_buf; |
5e8770f9d8f1
Move float-specific function to mpegaudiodec_float.c
vitor
parents:
11707
diff
changeset
|
32 int offset; |
5e8770f9d8f1
Move float-specific function to mpegaudiodec_float.c
vitor
parents:
11707
diff
changeset
|
33 |
5e8770f9d8f1
Move float-specific function to mpegaudiodec_float.c
vitor
parents:
11707
diff
changeset
|
34 offset = *synth_buf_offset; |
5e8770f9d8f1
Move float-specific function to mpegaudiodec_float.c
vitor
parents:
11707
diff
changeset
|
35 synth_buf = synth_buf_ptr + offset; |
5e8770f9d8f1
Move float-specific function to mpegaudiodec_float.c
vitor
parents:
11707
diff
changeset
|
36 |
12026
3f3d08bb5cf8
More mp{1,2,3} 32-point DCT transform to our common DCT framework.
vitor
parents:
11935
diff
changeset
|
37 s->dct.dct32(synth_buf, sb_samples); |
11935
5e8770f9d8f1
Move float-specific function to mpegaudiodec_float.c
vitor
parents:
11707
diff
changeset
|
38 s->apply_window_mp3(synth_buf, window, dither_state, samples, incr); |
5e8770f9d8f1
Move float-specific function to mpegaudiodec_float.c
vitor
parents:
11707
diff
changeset
|
39 |
5e8770f9d8f1
Move float-specific function to mpegaudiodec_float.c
vitor
parents:
11707
diff
changeset
|
40 offset = (offset - 32) & 511; |
5e8770f9d8f1
Move float-specific function to mpegaudiodec_float.c
vitor
parents:
11707
diff
changeset
|
41 *synth_buf_offset = offset; |
5e8770f9d8f1
Move float-specific function to mpegaudiodec_float.c
vitor
parents:
11707
diff
changeset
|
42 } |
5e8770f9d8f1
Move float-specific function to mpegaudiodec_float.c
vitor
parents:
11707
diff
changeset
|
43 |
12044
49c528a39187
mpegaudio: move compute_antialias_float() to mpegaudiodec_float.c
mru
parents:
12026
diff
changeset
|
44 static void compute_antialias_float(MPADecodeContext *s, |
49c528a39187
mpegaudio: move compute_antialias_float() to mpegaudiodec_float.c
mru
parents:
12026
diff
changeset
|
45 GranuleDef *g) |
49c528a39187
mpegaudio: move compute_antialias_float() to mpegaudiodec_float.c
mru
parents:
12026
diff
changeset
|
46 { |
49c528a39187
mpegaudio: move compute_antialias_float() to mpegaudiodec_float.c
mru
parents:
12026
diff
changeset
|
47 float *ptr; |
49c528a39187
mpegaudio: move compute_antialias_float() to mpegaudiodec_float.c
mru
parents:
12026
diff
changeset
|
48 int n, i; |
49c528a39187
mpegaudio: move compute_antialias_float() to mpegaudiodec_float.c
mru
parents:
12026
diff
changeset
|
49 |
49c528a39187
mpegaudio: move compute_antialias_float() to mpegaudiodec_float.c
mru
parents:
12026
diff
changeset
|
50 /* we antialias only "long" bands */ |
49c528a39187
mpegaudio: move compute_antialias_float() to mpegaudiodec_float.c
mru
parents:
12026
diff
changeset
|
51 if (g->block_type == 2) { |
49c528a39187
mpegaudio: move compute_antialias_float() to mpegaudiodec_float.c
mru
parents:
12026
diff
changeset
|
52 if (!g->switch_point) |
49c528a39187
mpegaudio: move compute_antialias_float() to mpegaudiodec_float.c
mru
parents:
12026
diff
changeset
|
53 return; |
49c528a39187
mpegaudio: move compute_antialias_float() to mpegaudiodec_float.c
mru
parents:
12026
diff
changeset
|
54 /* XXX: check this for 8000Hz case */ |
49c528a39187
mpegaudio: move compute_antialias_float() to mpegaudiodec_float.c
mru
parents:
12026
diff
changeset
|
55 n = 1; |
49c528a39187
mpegaudio: move compute_antialias_float() to mpegaudiodec_float.c
mru
parents:
12026
diff
changeset
|
56 } else { |
49c528a39187
mpegaudio: move compute_antialias_float() to mpegaudiodec_float.c
mru
parents:
12026
diff
changeset
|
57 n = SBLIMIT - 1; |
49c528a39187
mpegaudio: move compute_antialias_float() to mpegaudiodec_float.c
mru
parents:
12026
diff
changeset
|
58 } |
49c528a39187
mpegaudio: move compute_antialias_float() to mpegaudiodec_float.c
mru
parents:
12026
diff
changeset
|
59 |
49c528a39187
mpegaudio: move compute_antialias_float() to mpegaudiodec_float.c
mru
parents:
12026
diff
changeset
|
60 ptr = g->sb_hybrid + 18; |
49c528a39187
mpegaudio: move compute_antialias_float() to mpegaudiodec_float.c
mru
parents:
12026
diff
changeset
|
61 for(i = n;i > 0;i--) { |
49c528a39187
mpegaudio: move compute_antialias_float() to mpegaudiodec_float.c
mru
parents:
12026
diff
changeset
|
62 float tmp0, tmp1; |
49c528a39187
mpegaudio: move compute_antialias_float() to mpegaudiodec_float.c
mru
parents:
12026
diff
changeset
|
63 float *csa = &csa_table_float[0][0]; |
49c528a39187
mpegaudio: move compute_antialias_float() to mpegaudiodec_float.c
mru
parents:
12026
diff
changeset
|
64 #define FLOAT_AA(j)\ |
49c528a39187
mpegaudio: move compute_antialias_float() to mpegaudiodec_float.c
mru
parents:
12026
diff
changeset
|
65 tmp0= ptr[-1-j];\ |
49c528a39187
mpegaudio: move compute_antialias_float() to mpegaudiodec_float.c
mru
parents:
12026
diff
changeset
|
66 tmp1= ptr[ j];\ |
49c528a39187
mpegaudio: move compute_antialias_float() to mpegaudiodec_float.c
mru
parents:
12026
diff
changeset
|
67 ptr[-1-j] = tmp0 * csa[0+4*j] - tmp1 * csa[1+4*j];\ |
49c528a39187
mpegaudio: move compute_antialias_float() to mpegaudiodec_float.c
mru
parents:
12026
diff
changeset
|
68 ptr[ j] = tmp0 * csa[1+4*j] + tmp1 * csa[0+4*j]; |
49c528a39187
mpegaudio: move compute_antialias_float() to mpegaudiodec_float.c
mru
parents:
12026
diff
changeset
|
69 |
49c528a39187
mpegaudio: move compute_antialias_float() to mpegaudiodec_float.c
mru
parents:
12026
diff
changeset
|
70 FLOAT_AA(0) |
49c528a39187
mpegaudio: move compute_antialias_float() to mpegaudiodec_float.c
mru
parents:
12026
diff
changeset
|
71 FLOAT_AA(1) |
49c528a39187
mpegaudio: move compute_antialias_float() to mpegaudiodec_float.c
mru
parents:
12026
diff
changeset
|
72 FLOAT_AA(2) |
49c528a39187
mpegaudio: move compute_antialias_float() to mpegaudiodec_float.c
mru
parents:
12026
diff
changeset
|
73 FLOAT_AA(3) |
49c528a39187
mpegaudio: move compute_antialias_float() to mpegaudiodec_float.c
mru
parents:
12026
diff
changeset
|
74 FLOAT_AA(4) |
49c528a39187
mpegaudio: move compute_antialias_float() to mpegaudiodec_float.c
mru
parents:
12026
diff
changeset
|
75 FLOAT_AA(5) |
49c528a39187
mpegaudio: move compute_antialias_float() to mpegaudiodec_float.c
mru
parents:
12026
diff
changeset
|
76 FLOAT_AA(6) |
49c528a39187
mpegaudio: move compute_antialias_float() to mpegaudiodec_float.c
mru
parents:
12026
diff
changeset
|
77 FLOAT_AA(7) |
49c528a39187
mpegaudio: move compute_antialias_float() to mpegaudiodec_float.c
mru
parents:
12026
diff
changeset
|
78 |
49c528a39187
mpegaudio: move compute_antialias_float() to mpegaudiodec_float.c
mru
parents:
12026
diff
changeset
|
79 ptr += 18; |
49c528a39187
mpegaudio: move compute_antialias_float() to mpegaudiodec_float.c
mru
parents:
12026
diff
changeset
|
80 } |
49c528a39187
mpegaudio: move compute_antialias_float() to mpegaudiodec_float.c
mru
parents:
12026
diff
changeset
|
81 } |
49c528a39187
mpegaudio: move compute_antialias_float() to mpegaudiodec_float.c
mru
parents:
12026
diff
changeset
|
82 |
12187 | 83 static av_cold int decode_end(AVCodecContext * avctx) |
84 { | |
85 MPADecodeContext *s = avctx->priv_data; | |
86 ff_dct_end(&s->dct); | |
87 return 0; | |
88 } | |
89 | |
11707 | 90 #if CONFIG_MP1FLOAT_DECODER |
91 AVCodec mp1float_decoder = | |
92 { | |
93 "mp1float", | |
94 AVMEDIA_TYPE_AUDIO, | |
95 CODEC_ID_MP1, | |
96 sizeof(MPADecodeContext), | |
97 decode_init, | |
98 NULL, | |
12187 | 99 decode_end, |
11707 | 100 decode_frame, |
101 CODEC_CAP_PARSE_ONLY, | |
102 .flush= flush, | |
103 .long_name= NULL_IF_CONFIG_SMALL("MP1 (MPEG audio layer 1)"), | |
104 }; | |
105 #endif | |
106 #if CONFIG_MP2FLOAT_DECODER | |
107 AVCodec mp2float_decoder = | |
108 { | |
109 "mp2float", | |
110 AVMEDIA_TYPE_AUDIO, | |
111 CODEC_ID_MP2, | |
112 sizeof(MPADecodeContext), | |
113 decode_init, | |
114 NULL, | |
12187 | 115 decode_end, |
11707 | 116 decode_frame, |
117 CODEC_CAP_PARSE_ONLY, | |
118 .flush= flush, | |
119 .long_name= NULL_IF_CONFIG_SMALL("MP2 (MPEG audio layer 2)"), | |
120 }; | |
121 #endif | |
122 #if CONFIG_MP3FLOAT_DECODER | |
123 AVCodec mp3float_decoder = | |
124 { | |
125 "mp3float", | |
126 AVMEDIA_TYPE_AUDIO, | |
127 CODEC_ID_MP3, | |
128 sizeof(MPADecodeContext), | |
129 decode_init, | |
130 NULL, | |
12187 | 131 decode_end, |
11707 | 132 decode_frame, |
133 CODEC_CAP_PARSE_ONLY, | |
134 .flush= flush, | |
135 .long_name= NULL_IF_CONFIG_SMALL("MP3 (MPEG audio layer 3)"), | |
136 }; | |
137 #endif | |
138 #if CONFIG_MP3ADUFLOAT_DECODER | |
139 AVCodec mp3adufloat_decoder = | |
140 { | |
141 "mp3adufloat", | |
142 AVMEDIA_TYPE_AUDIO, | |
143 CODEC_ID_MP3ADU, | |
144 sizeof(MPADecodeContext), | |
145 decode_init, | |
146 NULL, | |
12187 | 147 decode_end, |
11707 | 148 decode_frame_adu, |
149 CODEC_CAP_PARSE_ONLY, | |
150 .flush= flush, | |
151 .long_name= NULL_IF_CONFIG_SMALL("ADU (Application Data Unit) MP3 (MPEG audio layer 3)"), | |
152 }; | |
153 #endif | |
154 #if CONFIG_MP3ON4FLOAT_DECODER | |
155 AVCodec mp3on4float_decoder = | |
156 { | |
157 "mp3on4float", | |
158 AVMEDIA_TYPE_AUDIO, | |
159 CODEC_ID_MP3ON4, | |
160 sizeof(MP3On4DecodeContext), | |
161 decode_init_mp3on4, | |
162 NULL, | |
163 decode_close_mp3on4, | |
164 decode_frame_mp3on4, | |
165 .flush= flush, | |
166 .long_name= NULL_IF_CONFIG_SMALL("MP3onMP4"), | |
167 }; | |
168 #endif |