Statistics
| Branch: | Revision:

ffmpeg / libavcodec / celp_math.h @ 2912e87a

History | View | Annotate | Download (2.17 KB)

1
/*
2
 * Various fixed-point math operations
3
 *
4
 * Copyright (c) 2008 Vladimir Voroshilov
5
 *
6
 * This file is part of Libav.
7
 *
8
 * Libav 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
 * Libav 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 Libav; if not, write to the Free Software
20
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21
 */
22

    
23
#ifndef AVCODEC_CELP_MATH_H
24
#define AVCODEC_CELP_MATH_H
25

    
26
#include <stdint.h>
27

    
28
/**
29
 * fixed-point implementation of cosine in [0; PI) domain.
30
 * @param arg fixed-point cosine argument, 0 <= arg < 0x4000
31
 *
32
 * @return value of (1<<15) * cos(arg * PI / (1<<14)), -0x8000 <= result <= 0x7fff
33
 */
34
int16_t ff_cos(uint16_t arg);
35

    
36
/**
37
 * fixed-point implementation of exp2(x) in [0; 1] domain.
38
 * @param power argument to exp2, 0 <= power <= 0x7fff
39
 *
40
 * @return value of (1<<20) * exp2(power / (1<<15))
41
 *         0x8000c <= result <= 0xfffea
42
 */
43
int ff_exp2(uint16_t power);
44

    
45
/**
46
 * Calculate log2(x).
47
 * @param value function argument, 0 < value <= 7fff ffff
48
 *
49
 * @return value of (1<<15) * log2(value)
50
 */
51
int ff_log2(uint32_t value);
52

    
53
/**
54
 * Shift value left or right depending on sign of offset parameter.
55
 * @param value value to shift
56
 * @param offset shift offset
57
 *
58
 * @return value << offset, if offset>=0; value >> -offset - otherwise
59
 */
60
static inline int bidir_sal(int value, int offset)
61
{
62
    if(offset < 0) return value >> -offset;
63
    else           return value <<  offset;
64
}
65

    
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
 */
74
float ff_dot_productf(const float* a, const float* b, int length);
75

    
76
#endif /* AVCODEC_CELP_MATH_H */