annotate x86/fft.c @ 11352:6e0af2cfdcfe libavcodec

Do MC and IDCT in coding (hilbert) order This increases the slice size to 64 pixels, due to having to decode an entire chroma superblock row per slice. This can be up to 6% slower depending on clip and CPU, but is necessary for future optimizations that gain significantly more than was lost.
author conrad
date Wed, 03 Mar 2010 23:27:40 +0000
parents 5cf49858179a
children 1bf322283429
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10175
5cf49858179a Move per-arch fft init bits into the corresponding subdirs
mru
parents:
diff changeset
1 /*
5cf49858179a Move per-arch fft init bits into the corresponding subdirs
mru
parents:
diff changeset
2 * This file is part of FFmpeg.
5cf49858179a Move per-arch fft init bits into the corresponding subdirs
mru
parents:
diff changeset
3 *
5cf49858179a Move per-arch fft init bits into the corresponding subdirs
mru
parents:
diff changeset
4 * FFmpeg is free software; you can redistribute it and/or
5cf49858179a Move per-arch fft init bits into the corresponding subdirs
mru
parents:
diff changeset
5 * modify it under the terms of the GNU Lesser General Public
5cf49858179a Move per-arch fft init bits into the corresponding subdirs
mru
parents:
diff changeset
6 * License as published by the Free Software Foundation; either
5cf49858179a Move per-arch fft init bits into the corresponding subdirs
mru
parents:
diff changeset
7 * version 2.1 of the License, or (at your option) any later version.
5cf49858179a Move per-arch fft init bits into the corresponding subdirs
mru
parents:
diff changeset
8 *
5cf49858179a Move per-arch fft init bits into the corresponding subdirs
mru
parents:
diff changeset
9 * FFmpeg is distributed in the hope that it will be useful,
5cf49858179a Move per-arch fft init bits into the corresponding subdirs
mru
parents:
diff changeset
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
5cf49858179a Move per-arch fft init bits into the corresponding subdirs
mru
parents:
diff changeset
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
5cf49858179a Move per-arch fft init bits into the corresponding subdirs
mru
parents:
diff changeset
12 * Lesser General Public License for more details.
5cf49858179a Move per-arch fft init bits into the corresponding subdirs
mru
parents:
diff changeset
13 *
5cf49858179a Move per-arch fft init bits into the corresponding subdirs
mru
parents:
diff changeset
14 * You should have received a copy of the GNU Lesser General Public
5cf49858179a Move per-arch fft init bits into the corresponding subdirs
mru
parents:
diff changeset
15 * License along with FFmpeg; if not, write to the Free Software
5cf49858179a Move per-arch fft init bits into the corresponding subdirs
mru
parents:
diff changeset
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
5cf49858179a Move per-arch fft init bits into the corresponding subdirs
mru
parents:
diff changeset
17 */
5cf49858179a Move per-arch fft init bits into the corresponding subdirs
mru
parents:
diff changeset
18
5cf49858179a Move per-arch fft init bits into the corresponding subdirs
mru
parents:
diff changeset
19 #include "libavcodec/dsputil.h"
5cf49858179a Move per-arch fft init bits into the corresponding subdirs
mru
parents:
diff changeset
20 #include "fft.h"
5cf49858179a Move per-arch fft init bits into the corresponding subdirs
mru
parents:
diff changeset
21
5cf49858179a Move per-arch fft init bits into the corresponding subdirs
mru
parents:
diff changeset
22 av_cold void ff_fft_init_mmx(FFTContext *s)
5cf49858179a Move per-arch fft init bits into the corresponding subdirs
mru
parents:
diff changeset
23 {
5cf49858179a Move per-arch fft init bits into the corresponding subdirs
mru
parents:
diff changeset
24 #if HAVE_YASM
5cf49858179a Move per-arch fft init bits into the corresponding subdirs
mru
parents:
diff changeset
25 int has_vectors = mm_support();
5cf49858179a Move per-arch fft init bits into the corresponding subdirs
mru
parents:
diff changeset
26 if (has_vectors & FF_MM_SSE && HAVE_SSE) {
5cf49858179a Move per-arch fft init bits into the corresponding subdirs
mru
parents:
diff changeset
27 /* SSE for P3/P4/K8 */
5cf49858179a Move per-arch fft init bits into the corresponding subdirs
mru
parents:
diff changeset
28 s->imdct_calc = ff_imdct_calc_sse;
5cf49858179a Move per-arch fft init bits into the corresponding subdirs
mru
parents:
diff changeset
29 s->imdct_half = ff_imdct_half_sse;
5cf49858179a Move per-arch fft init bits into the corresponding subdirs
mru
parents:
diff changeset
30 s->fft_permute = ff_fft_permute_sse;
5cf49858179a Move per-arch fft init bits into the corresponding subdirs
mru
parents:
diff changeset
31 s->fft_calc = ff_fft_calc_sse;
5cf49858179a Move per-arch fft init bits into the corresponding subdirs
mru
parents:
diff changeset
32 } else if (has_vectors & FF_MM_3DNOWEXT && HAVE_AMD3DNOWEXT) {
5cf49858179a Move per-arch fft init bits into the corresponding subdirs
mru
parents:
diff changeset
33 /* 3DNowEx for K7 */
5cf49858179a Move per-arch fft init bits into the corresponding subdirs
mru
parents:
diff changeset
34 s->imdct_calc = ff_imdct_calc_3dn2;
5cf49858179a Move per-arch fft init bits into the corresponding subdirs
mru
parents:
diff changeset
35 s->imdct_half = ff_imdct_half_3dn2;
5cf49858179a Move per-arch fft init bits into the corresponding subdirs
mru
parents:
diff changeset
36 s->fft_calc = ff_fft_calc_3dn2;
5cf49858179a Move per-arch fft init bits into the corresponding subdirs
mru
parents:
diff changeset
37 } else if (has_vectors & FF_MM_3DNOW && HAVE_AMD3DNOW) {
5cf49858179a Move per-arch fft init bits into the corresponding subdirs
mru
parents:
diff changeset
38 /* 3DNow! for K6-2/3 */
5cf49858179a Move per-arch fft init bits into the corresponding subdirs
mru
parents:
diff changeset
39 s->imdct_calc = ff_imdct_calc_3dn;
5cf49858179a Move per-arch fft init bits into the corresponding subdirs
mru
parents:
diff changeset
40 s->imdct_half = ff_imdct_half_3dn;
5cf49858179a Move per-arch fft init bits into the corresponding subdirs
mru
parents:
diff changeset
41 s->fft_calc = ff_fft_calc_3dn;
5cf49858179a Move per-arch fft init bits into the corresponding subdirs
mru
parents:
diff changeset
42 }
5cf49858179a Move per-arch fft init bits into the corresponding subdirs
mru
parents:
diff changeset
43 #endif
5cf49858179a Move per-arch fft init bits into the corresponding subdirs
mru
parents:
diff changeset
44 }