annotate celp_math.h @ 12530:63edd10ad4bc libavcodec tip

Try to fix crashes introduced by r25218 r25218 made assumptions about the existence of past reference frames that weren't necessarily true.
author darkshikari
date Tue, 28 Sep 2010 09:06:22 +0000
parents fdafbcef52f5
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6682
1064be7fea22 Fixed-point implementation of ff_cos, ff_log2, ff_exp2.
voroshil
parents:
diff changeset
1 /*
1064be7fea22 Fixed-point implementation of ff_cos, ff_log2, ff_exp2.
voroshil
parents:
diff changeset
2 * Various fixed-point math operations
1064be7fea22 Fixed-point implementation of ff_cos, ff_log2, ff_exp2.
voroshil
parents:
diff changeset
3 *
1064be7fea22 Fixed-point implementation of ff_cos, ff_log2, ff_exp2.
voroshil
parents:
diff changeset
4 * Copyright (c) 2008 Vladimir Voroshilov
1064be7fea22 Fixed-point implementation of ff_cos, ff_log2, ff_exp2.
voroshil
parents:
diff changeset
5 *
1064be7fea22 Fixed-point implementation of ff_cos, ff_log2, ff_exp2.
voroshil
parents:
diff changeset
6 * This file is part of FFmpeg.
1064be7fea22 Fixed-point implementation of ff_cos, ff_log2, ff_exp2.
voroshil
parents:
diff changeset
7 *
1064be7fea22 Fixed-point implementation of ff_cos, ff_log2, ff_exp2.
voroshil
parents:
diff changeset
8 * FFmpeg is free software; you can redistribute it and/or
1064be7fea22 Fixed-point implementation of ff_cos, ff_log2, ff_exp2.
voroshil
parents:
diff changeset
9 * modify it under the terms of the GNU Lesser General Public
1064be7fea22 Fixed-point implementation of ff_cos, ff_log2, ff_exp2.
voroshil
parents:
diff changeset
10 * License as published by the Free Software Foundation; either
1064be7fea22 Fixed-point implementation of ff_cos, ff_log2, ff_exp2.
voroshil
parents:
diff changeset
11 * version 2.1 of the License, or (at your option) any later version.
1064be7fea22 Fixed-point implementation of ff_cos, ff_log2, ff_exp2.
voroshil
parents:
diff changeset
12 *
1064be7fea22 Fixed-point implementation of ff_cos, ff_log2, ff_exp2.
voroshil
parents:
diff changeset
13 * FFmpeg is distributed in the hope that it will be useful,
1064be7fea22 Fixed-point implementation of ff_cos, ff_log2, ff_exp2.
voroshil
parents:
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
1064be7fea22 Fixed-point implementation of ff_cos, ff_log2, ff_exp2.
voroshil
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1064be7fea22 Fixed-point implementation of ff_cos, ff_log2, ff_exp2.
voroshil
parents:
diff changeset
16 * Lesser General Public License for more details.
1064be7fea22 Fixed-point implementation of ff_cos, ff_log2, ff_exp2.
voroshil
parents:
diff changeset
17 *
1064be7fea22 Fixed-point implementation of ff_cos, ff_log2, ff_exp2.
voroshil
parents:
diff changeset
18 * You should have received a copy of the GNU Lesser General Public
1064be7fea22 Fixed-point implementation of ff_cos, ff_log2, ff_exp2.
voroshil
parents:
diff changeset
19 * License along with FFmpeg; if not, write to the Free Software
1064be7fea22 Fixed-point implementation of ff_cos, ff_log2, ff_exp2.
voroshil
parents:
diff changeset
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
1064be7fea22 Fixed-point implementation of ff_cos, ff_log2, ff_exp2.
voroshil
parents:
diff changeset
21 */
1064be7fea22 Fixed-point implementation of ff_cos, ff_log2, ff_exp2.
voroshil
parents:
diff changeset
22
8048
ecb1962c12f3 Rename acelp_math.[ch] to celp_math.[ch] to prepare for QCELP decoder merge.
diego
parents: 7760
diff changeset
23 #ifndef AVCODEC_CELP_MATH_H
ecb1962c12f3 Rename acelp_math.[ch] to celp_math.[ch] to prepare for QCELP decoder merge.
diego
parents: 7760
diff changeset
24 #define AVCODEC_CELP_MATH_H
6682
1064be7fea22 Fixed-point implementation of ff_cos, ff_log2, ff_exp2.
voroshil
parents:
diff changeset
25
6735
459fe563a4dc add necessary #includes in headers
mru
parents: 6706
diff changeset
26 #include <stdint.h>
459fe563a4dc add necessary #includes in headers
mru
parents: 6706
diff changeset
27
6682
1064be7fea22 Fixed-point implementation of ff_cos, ff_log2, ff_exp2.
voroshil
parents:
diff changeset
28 /**
7655
f91a738da9c3 Doxygen syntax consistency.
michael
parents: 7188
diff changeset
29 * fixed-point implementation of cosine in [0; PI) domain.
f91a738da9c3 Doxygen syntax consistency.
michael
parents: 7188
diff changeset
30 * @param arg fixed-point cosine argument, 0 <= arg < 0x4000
6682
1064be7fea22 Fixed-point implementation of ff_cos, ff_log2, ff_exp2.
voroshil
parents:
diff changeset
31 *
7655
f91a738da9c3 Doxygen syntax consistency.
michael
parents: 7188
diff changeset
32 * @return value of (1<<15) * cos(arg * PI / (1<<14)), -0x8000 <= result <= 0x7fff
6682
1064be7fea22 Fixed-point implementation of ff_cos, ff_log2, ff_exp2.
voroshil
parents:
diff changeset
33 */
1064be7fea22 Fixed-point implementation of ff_cos, ff_log2, ff_exp2.
voroshil
parents:
diff changeset
34 int16_t ff_cos(uint16_t arg);
1064be7fea22 Fixed-point implementation of ff_cos, ff_log2, ff_exp2.
voroshil
parents:
diff changeset
35
1064be7fea22 Fixed-point implementation of ff_cos, ff_log2, ff_exp2.
voroshil
parents:
diff changeset
36 /**
7655
f91a738da9c3 Doxygen syntax consistency.
michael
parents: 7188
diff changeset
37 * fixed-point implementation of exp2(x) in [0; 1] domain.
f91a738da9c3 Doxygen syntax consistency.
michael
parents: 7188
diff changeset
38 * @param power argument to exp2, 0 <= power <= 0x7fff
6682
1064be7fea22 Fixed-point implementation of ff_cos, ff_log2, ff_exp2.
voroshil
parents:
diff changeset
39 *
7655
f91a738da9c3 Doxygen syntax consistency.
michael
parents: 7188
diff changeset
40 * @return value of (1<<20) * exp2(power / (1<<15))
6682
1064be7fea22 Fixed-point implementation of ff_cos, ff_log2, ff_exp2.
voroshil
parents:
diff changeset
41 * 0x8000c <= result <= 0xfffea
1064be7fea22 Fixed-point implementation of ff_cos, ff_log2, ff_exp2.
voroshil
parents:
diff changeset
42 */
1064be7fea22 Fixed-point implementation of ff_cos, ff_log2, ff_exp2.
voroshil
parents:
diff changeset
43 int ff_exp2(uint16_t power);
1064be7fea22 Fixed-point implementation of ff_cos, ff_log2, ff_exp2.
voroshil
parents:
diff changeset
44
1064be7fea22 Fixed-point implementation of ff_cos, ff_log2, ff_exp2.
voroshil
parents:
diff changeset
45 /**
12024
fdafbcef52f5 Fix grammar errors in documentation
mru
parents: 8505
diff changeset
46 * Calculate log2(x).
7655
f91a738da9c3 Doxygen syntax consistency.
michael
parents: 7188
diff changeset
47 * @param value function argument, 0 < value <= 7fff ffff
6682
1064be7fea22 Fixed-point implementation of ff_cos, ff_log2, ff_exp2.
voroshil
parents:
diff changeset
48 *
7655
f91a738da9c3 Doxygen syntax consistency.
michael
parents: 7188
diff changeset
49 * @return value of (1<<15) * log2(value)
6682
1064be7fea22 Fixed-point implementation of ff_cos, ff_log2, ff_exp2.
voroshil
parents:
diff changeset
50 */
1064be7fea22 Fixed-point implementation of ff_cos, ff_log2, ff_exp2.
voroshil
parents:
diff changeset
51 int ff_log2(uint32_t value);
1064be7fea22 Fixed-point implementation of ff_cos, ff_log2, ff_exp2.
voroshil
parents:
diff changeset
52
1064be7fea22 Fixed-point implementation of ff_cos, ff_log2, ff_exp2.
voroshil
parents:
diff changeset
53 /**
7655
f91a738da9c3 Doxygen syntax consistency.
michael
parents: 7188
diff changeset
54 * Shift value left or right depending on sign of offset parameter.
f91a738da9c3 Doxygen syntax consistency.
michael
parents: 7188
diff changeset
55 * @param value value to shift
f91a738da9c3 Doxygen syntax consistency.
michael
parents: 7188
diff changeset
56 * @param offset shift offset
6777
6f402a181803 Implement bidirectional (positive offset - left, negative - right)
voroshil
parents: 6739
diff changeset
57 *
7655
f91a738da9c3 Doxygen syntax consistency.
michael
parents: 7188
diff changeset
58 * @return value << offset, if offset>=0; value >> -offset - otherwise
6777
6f402a181803 Implement bidirectional (positive offset - left, negative - right)
voroshil
parents: 6739
diff changeset
59 */
6f402a181803 Implement bidirectional (positive offset - left, negative - right)
voroshil
parents: 6739
diff changeset
60 static inline int bidir_sal(int value, int offset)
6f402a181803 Implement bidirectional (positive offset - left, negative - right)
voroshil
parents: 6739
diff changeset
61 {
6f402a181803 Implement bidirectional (positive offset - left, negative - right)
voroshil
parents: 6739
diff changeset
62 if(offset < 0) return value >> -offset;
6f402a181803 Implement bidirectional (positive offset - left, negative - right)
voroshil
parents: 6739
diff changeset
63 else return value << offset;
6f402a181803 Implement bidirectional (positive offset - left, negative - right)
voroshil
parents: 6739
diff changeset
64 }
6f402a181803 Implement bidirectional (positive offset - left, negative - right)
voroshil
parents: 6739
diff changeset
65
8090
1c07635d7334 Add ff_dot_productf() to celp_math.{c,h}
vitor
parents: 8048
diff changeset
66 /**
1c07635d7334 Add ff_dot_productf() to celp_math.{c,h}
vitor
parents: 8048
diff changeset
67 * returns the dot product.
1c07635d7334 Add ff_dot_productf() to celp_math.{c,h}
vitor
parents: 8048
diff changeset
68 * @param a input data array
1c07635d7334 Add ff_dot_productf() to celp_math.{c,h}
vitor
parents: 8048
diff changeset
69 * @param b input data array
1c07635d7334 Add ff_dot_productf() to celp_math.{c,h}
vitor
parents: 8048
diff changeset
70 * @param length number of elements
1c07635d7334 Add ff_dot_productf() to celp_math.{c,h}
vitor
parents: 8048
diff changeset
71 *
1c07635d7334 Add ff_dot_productf() to celp_math.{c,h}
vitor
parents: 8048
diff changeset
72 * @return dot product = sum of elementwise products
1c07635d7334 Add ff_dot_productf() to celp_math.{c,h}
vitor
parents: 8048
diff changeset
73 */
8250
cf4d575b1982 Delete unnecessary 'extern' keywords.
diego
parents: 8090
diff changeset
74 float ff_dot_productf(const float* a, const float* b, int length);
8090
1c07635d7334 Add ff_dot_productf() to celp_math.{c,h}
vitor
parents: 8048
diff changeset
75
8048
ecb1962c12f3 Rename acelp_math.[ch] to celp_math.[ch] to prepare for QCELP decoder merge.
diego
parents: 7760
diff changeset
76 #endif /* AVCODEC_CELP_MATH_H */