Mercurial > libavcodec.hg
annotate celp_math.h @ 10543:7ff7a34848bf libavcodec
10l trocadero: ZMBV encoder used zero score to detect whether block should be
XORed with source one or not, which went wrong with new block comparing code.
So track this condition explicitly.
author | kostya |
---|---|
date | Fri, 20 Nov 2009 07:22:41 +0000 |
parents | c8743c33eeef |
children | fdafbcef52f5 |
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 | 26 #include <stdint.h> |
27 | |
6682
1064be7fea22
Fixed-point implementation of ff_cos, ff_log2, ff_exp2.
voroshil
parents:
diff
changeset
|
28 /** |
7655 | 29 * fixed-point implementation of cosine in [0; PI) domain. |
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 | 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 | 37 * fixed-point implementation of exp2(x) in [0; 1] domain. |
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 | 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 /** |
7655 | 46 * Calculates log2(x). |
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 | 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 | 54 * Shift value left or right depending on sign of offset parameter. |
55 * @param value value to shift | |
56 * @param offset shift offset | |
6777
6f402a181803
Implement bidirectional (positive offset - left, negative - right)
voroshil
parents:
6739
diff
changeset
|
57 * |
7655 | 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 | 66 /** |
67 * returns the dot product. | |
68 * @param a input data array | |
69 * @param b input data array | |
70 * @param length number of elements | |
71 * | |
72 * @return dot product = sum of elementwise products | |
73 */ | |
8250 | 74 float ff_dot_productf(const float* a, const float* b, int length); |
8090 | 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 */ |