Mercurial > libavcodec.hg
comparison acelp_math.h @ 6682:1064be7fea22 libavcodec
Fixed-point implementation of ff_cos, ff_log2, ff_exp2.
Also implemented routine for calculating sum(a[i] * a[i-offset]>>shift)
author | voroshil |
---|---|
date | Fri, 25 Apr 2008 17:14:47 +0000 |
parents | |
children | 2cb901474f6f |
comparison
equal
deleted
inserted
replaced
6681:c0c3a405eb75 | 6682:1064be7fea22 |
---|---|
1 /* | |
2 * Various fixed-point math operations | |
3 * | |
4 * Copyright (c) 2008 Vladimir Voroshilov | |
5 * | |
6 * This file is part of FFmpeg. | |
7 * | |
8 * FFmpeg is free software; you can redistribute it and/or | |
9 * modify it under the terms of the GNU Lesser General Public | |
10 * License as published by the Free Software Foundation; either | |
11 * version 2.1 of the License, or (at your option) any later version. | |
12 * | |
13 * FFmpeg is distributed in the hope that it will be useful, | |
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
16 * Lesser General Public License for more details. | |
17 * | |
18 * You should have received a copy of the GNU Lesser General Public | |
19 * License along with FFmpeg; if not, write to the Free Software | |
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |
21 */ | |
22 | |
23 #ifndef FFMPEG_ACELP_MATH_H | |
24 #define FFMPEG_ACELP_MATH_H | |
25 | |
26 /** | |
27 * \brief fixed-point implementation of cosine in [0; PI) domain | |
28 * \param arg fixed-point cosine argument, 0 <= arg < 0x4000 | |
29 * | |
30 * \return value of (1<<15) * cos(arg * PI / (1<<14)), -0x8000 <= result <= 0x7fff | |
31 */ | |
32 int16_t ff_cos(uint16_t arg); | |
33 | |
34 /** | |
35 * \brief fixed-point implementation of exp2(x) in [0; 1] domain | |
36 * \param power argument to exp2, 0 <= power <= 0x7fff | |
37 * | |
38 * \return value of (1<<20) * exp2(power / (1<<15)) | |
39 * 0x8000c <= result <= 0xfffea | |
40 */ | |
41 int ff_exp2(uint16_t power); | |
42 | |
43 /** | |
44 * \brief Calculates log2(x) | |
45 * \param value function argument, 0 < value <= 7fff ffff | |
46 * | |
47 * \return value of (1<<15) * log2(value) | |
48 */ | |
49 int ff_log2(uint32_t value); | |
50 | |
51 /** | |
52 * \brief Calculates sum of array elements multiplications | |
53 * \param speech array with input data | |
54 * \param length number elements to proceed | |
55 * \param offset offset for calculation sum of s[i]*s[i+offset] | |
56 * \param shift right shift by this value will be done before multiplication | |
57 * | |
58 * \return sum of multiplications | |
59 * | |
60 * \note array must be at least length+offset long! | |
61 */ | |
62 static int sum_of_squares(const int16_t* speech, int length, int offset, int shift) | |
63 { | |
64 const int16_t* speech_end; | |
65 int sum = 0; | |
66 | |
67 for(speech_end=speech+length; speech<speech_end; speech++) | |
68 sum += (speech[0] * speech[offset]) >> shift; | |
69 | |
70 return sum; | |
71 } | |
72 | |
73 #endif // FFMPEG_ACELP_MATH_H |