annotate pca.h @ 728:1fa3820b1a84 libavutil

ARM asm for AV_RN*() ARMv6 and later support unaligned loads and stores for single word/halfword but not double/multiple. GCC is ignorant of this and will always use bytewise accesses for unaligned data. Casting to an int32_t pointer is dangerous since a load/store double or multiple instruction might be used (this happens with some code in FFmpeg). Implementing the AV_[RW]* macros with inline asm using only supported instructions gives fast and safe unaligned accesses. ARM RVCT does the right thing with generic code. This gives an overall speedup of up to 10%.
author mru
date Sat, 18 Apr 2009 00:00:28 +0000
parents 70bdd5501662
children 0795a743bda1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
550
200789f57b62 Principal component analysis
michael
parents:
diff changeset
1 /*
633
8c48a1b999a3 spelling/grammar/consistency review part I
diego
parents: 567
diff changeset
2 * principal component analysis (PCA)
550
200789f57b62 Principal component analysis
michael
parents:
diff changeset
3 * Copyright (c) 2004 Michael Niedermayer <michaelni@gmx.at>
200789f57b62 Principal component analysis
michael
parents:
diff changeset
4 *
563
daccf2fe1053 Copy and paste LGPL from tree.h, the previous one referred to a non-existing
michael
parents: 558
diff changeset
5 * This file is part of FFmpeg.
daccf2fe1053 Copy and paste LGPL from tree.h, the previous one referred to a non-existing
michael
parents: 558
diff changeset
6 *
daccf2fe1053 Copy and paste LGPL from tree.h, the previous one referred to a non-existing
michael
parents: 558
diff changeset
7 * FFmpeg is free software; you can redistribute it and/or
550
200789f57b62 Principal component analysis
michael
parents:
diff changeset
8 * modify it under the terms of the GNU Lesser General Public
200789f57b62 Principal component analysis
michael
parents:
diff changeset
9 * License as published by the Free Software Foundation; either
563
daccf2fe1053 Copy and paste LGPL from tree.h, the previous one referred to a non-existing
michael
parents: 558
diff changeset
10 * version 2.1 of the License, or (at your option) any later version.
550
200789f57b62 Principal component analysis
michael
parents:
diff changeset
11 *
563
daccf2fe1053 Copy and paste LGPL from tree.h, the previous one referred to a non-existing
michael
parents: 558
diff changeset
12 * FFmpeg is distributed in the hope that it will be useful,
550
200789f57b62 Principal component analysis
michael
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
200789f57b62 Principal component analysis
michael
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
200789f57b62 Principal component analysis
michael
parents:
diff changeset
15 * Lesser General Public License for more details.
200789f57b62 Principal component analysis
michael
parents:
diff changeset
16 *
200789f57b62 Principal component analysis
michael
parents:
diff changeset
17 * You should have received a copy of the GNU Lesser General Public
563
daccf2fe1053 Copy and paste LGPL from tree.h, the previous one referred to a non-existing
michael
parents: 558
diff changeset
18 * License along with FFmpeg; if not, write to the Free Software
daccf2fe1053 Copy and paste LGPL from tree.h, the previous one referred to a non-existing
michael
parents: 558
diff changeset
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
550
200789f57b62 Principal component analysis
michael
parents:
diff changeset
20 */
200789f57b62 Principal component analysis
michael
parents:
diff changeset
21
200789f57b62 Principal component analysis
michael
parents:
diff changeset
22 /**
642
70bdd5501662 Use full internal pathname in doxygen @file directives.
diego
parents: 633
diff changeset
23 * @file libavutil/pca.h
633
8c48a1b999a3 spelling/grammar/consistency review part I
diego
parents: 567
diff changeset
24 * principal component analysis (PCA)
550
200789f57b62 Principal component analysis
michael
parents:
diff changeset
25 */
200789f57b62 Principal component analysis
michael
parents:
diff changeset
26
567
bd4052d9050c Globally rename the header inclusion guard names.
stefano
parents: 563
diff changeset
27 #ifndef AVUTIL_PCA_H
bd4052d9050c Globally rename the header inclusion guard names.
stefano
parents: 563
diff changeset
28 #define AVUTIL_PCA_H
558
9889c1cbf9e1 Add multiple inclusion guards for consistency and to avoid them being
michael
parents: 557
diff changeset
29
556
78c5913787ca Add prototypes to header (based on code by ramiro)
michael
parents: 550
diff changeset
30 struct PCA *ff_pca_init(int n);
78c5913787ca Add prototypes to header (based on code by ramiro)
michael
parents: 550
diff changeset
31 void ff_pca_free(struct PCA *pca);
78c5913787ca Add prototypes to header (based on code by ramiro)
michael
parents: 550
diff changeset
32 void ff_pca_add(struct PCA *pca, double *v);
78c5913787ca Add prototypes to header (based on code by ramiro)
michael
parents: 550
diff changeset
33 int ff_pca(struct PCA *pca, double *eigenvector, double *eigenvalue);
558
9889c1cbf9e1 Add multiple inclusion guards for consistency and to avoid them being
michael
parents: 557
diff changeset
34
567
bd4052d9050c Globally rename the header inclusion guard names.
stefano
parents: 563
diff changeset
35 #endif /* AVUTIL_PCA_H */