diff options
author | Vladimir Voroshilov <voroshil@gmail.com> | 2008-04-25 17:14:47 +0000 |
---|---|---|
committer | Vladimir Voroshilov <voroshil@gmail.com> | 2008-04-25 17:14:47 +0000 |
commit | 1cf3ee2d1c13b5c22b471ac7ae08432eb357dd9f (patch) | |
tree | eb6e0ef4be4dc16ac7daf3d566ff8306e8088027 /libavcodec/acelp_math.h | |
parent | bf52a72023f92e93e6522c4d560e50ad331e2409 (diff) | |
download | ffmpeg-1cf3ee2d1c13b5c22b471ac7ae08432eb357dd9f.tar.gz |
Fixed-point implementation of ff_cos, ff_log2, ff_exp2.
Also implemented routine for calculating sum(a[i] * a[i-offset]>>shift)
Originally committed as revision 12974 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/acelp_math.h')
-rw-r--r-- | libavcodec/acelp_math.h | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/libavcodec/acelp_math.h b/libavcodec/acelp_math.h new file mode 100644 index 0000000000..1cc36e6b49 --- /dev/null +++ b/libavcodec/acelp_math.h @@ -0,0 +1,73 @@ +/* + * Various fixed-point math operations + * + * Copyright (c) 2008 Vladimir Voroshilov + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef FFMPEG_ACELP_MATH_H +#define FFMPEG_ACELP_MATH_H + +/** + * \brief fixed-point implementation of cosine in [0; PI) domain + * \param arg fixed-point cosine argument, 0 <= arg < 0x4000 + * + * \return value of (1<<15) * cos(arg * PI / (1<<14)), -0x8000 <= result <= 0x7fff + */ +int16_t ff_cos(uint16_t arg); + +/** + * \brief fixed-point implementation of exp2(x) in [0; 1] domain + * \param power argument to exp2, 0 <= power <= 0x7fff + * + * \return value of (1<<20) * exp2(power / (1<<15)) + * 0x8000c <= result <= 0xfffea + */ +int ff_exp2(uint16_t power); + +/** + * \brief Calculates log2(x) + * \param value function argument, 0 < value <= 7fff ffff + * + * \return value of (1<<15) * log2(value) + */ +int ff_log2(uint32_t value); + +/** + * \brief Calculates sum of array elements multiplications + * \param speech array with input data + * \param length number elements to proceed + * \param offset offset for calculation sum of s[i]*s[i+offset] + * \param shift right shift by this value will be done before multiplication + * + * \return sum of multiplications + * + * \note array must be at least length+offset long! + */ +static int sum_of_squares(const int16_t* speech, int length, int offset, int shift) +{ + const int16_t* speech_end; + int sum = 0; + + for(speech_end=speech+length; speech<speech_end; speech++) + sum += (speech[0] * speech[offset]) >> shift; + + return sum; +} + +#endif // FFMPEG_ACELP_MATH_H |