FFmpeg
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
Examples
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
libavutil
float_dsp.c
Go to the documentation of this file.
1
/*
2
* Copyright 2005 Balatoni Denes
3
* Copyright 2006 Loren Merritt
4
*
5
* This file is part of FFmpeg.
6
*
7
* FFmpeg is free software; you can redistribute it and/or
8
* modify it under the terms of the GNU Lesser General Public
9
* License as published by the Free Software Foundation; either
10
* version 2.1 of the License, or (at your option) any later version.
11
*
12
* FFmpeg is distributed in the hope that it will be useful,
13
* but WITHOUT ANY WARRANTY; without even the implied warranty of
14
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
* Lesser General Public License for more details.
16
*
17
* You should have received a copy of the GNU Lesser General Public
18
* License along with FFmpeg; if not, write to the Free Software
19
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20
*/
21
22
#include "config.h"
23
#include "
libavutil/attributes.h
"
24
#include "
float_dsp.h
"
25
26
static
void
vector_fmul_c
(
float
*dst,
const
float
*src0,
const
float
*src1,
27
int
len
)
28
{
29
int
i;
30
for
(i = 0; i <
len
; i++)
31
dst[i] = src0[i] * src1[i];
32
}
33
34
static
void
vector_fmac_scalar_c
(
float
*dst,
const
float
*
src
,
float
mul,
35
int
len
)
36
{
37
int
i;
38
for
(i = 0; i <
len
; i++)
39
dst[i] += src[i] * mul;
40
}
41
42
static
void
vector_fmul_scalar_c
(
float
*dst,
const
float
*
src
,
float
mul,
43
int
len
)
44
{
45
int
i;
46
for
(i = 0; i <
len
; i++)
47
dst[i] = src[i] * mul;
48
}
49
50
static
void
vector_dmul_scalar_c
(
double
*dst,
const
double
*
src
,
double
mul,
51
int
len
)
52
{
53
int
i;
54
for
(i = 0; i <
len
; i++)
55
dst[i] = src[i] * mul;
56
}
57
58
static
void
vector_fmul_window_c
(
float
*dst,
const
float
*src0,
59
const
float
*src1,
const
float
*win,
int
len
)
60
{
61
int
i, j;
62
63
dst +=
len
;
64
win +=
len
;
65
src0 +=
len
;
66
67
for
(i = -len, j = len - 1; i < 0; i++, j--) {
68
float
s0
= src0[i];
69
float
s1
= src1[j];
70
float
wi = win[i];
71
float
wj = win[j];
72
dst[i] = s0 * wj - s1 * wi;
73
dst[j] = s0 * wi + s1 * wj;
74
}
75
}
76
77
static
void
vector_fmul_add_c
(
float
*dst,
const
float
*src0,
const
float
*src1,
78
const
float
*src2,
int
len
){
79
int
i;
80
81
for
(i = 0; i <
len
; i++)
82
dst[i] = src0[i] * src1[i] + src2[i];
83
}
84
85
static
void
vector_fmul_reverse_c
(
float
*dst,
const
float
*src0,
86
const
float
*src1,
int
len
)
87
{
88
int
i;
89
90
src1 += len-1;
91
for
(i = 0; i <
len
; i++)
92
dst[i] = src0[i] * src1[-i];
93
}
94
95
static
void
butterflies_float_c
(
float
*
av_restrict
v1,
float
*
av_restrict
v2,
96
int
len
)
97
{
98
int
i;
99
100
for
(i = 0; i <
len
; i++) {
101
float
t
= v1[i] - v2[i];
102
v1[i] += v2[i];
103
v2[i] =
t
;
104
}
105
}
106
107
float
avpriv_scalarproduct_float_c
(
const
float
*v1,
const
float
*v2,
int
len
)
108
{
109
float
p = 0.0;
110
int
i;
111
112
for
(i = 0; i <
len
; i++)
113
p += v1[i] * v2[i];
114
115
return
p;
116
}
117
118
av_cold
void
avpriv_float_dsp_init
(
AVFloatDSPContext
*fdsp,
int
bit_exact)
119
{
120
fdsp->
vector_fmul
=
vector_fmul_c
;
121
fdsp->
vector_fmac_scalar
=
vector_fmac_scalar_c
;
122
fdsp->
vector_fmul_scalar
=
vector_fmul_scalar_c
;
123
fdsp->
vector_dmul_scalar
=
vector_dmul_scalar_c
;
124
fdsp->
vector_fmul_window
=
vector_fmul_window_c
;
125
fdsp->
vector_fmul_add
=
vector_fmul_add_c
;
126
fdsp->
vector_fmul_reverse
=
vector_fmul_reverse_c
;
127
fdsp->
butterflies_float
=
butterflies_float_c
;
128
fdsp->
scalarproduct_float
=
avpriv_scalarproduct_float_c
;
129
130
#if ARCH_ARM
131
ff_float_dsp_init_arm
(fdsp);
132
#elif ARCH_PPC
133
ff_float_dsp_init_ppc
(fdsp, bit_exact);
134
#elif ARCH_X86
135
ff_float_dsp_init_x86
(fdsp);
136
#elif ARCH_MIPS
137
ff_float_dsp_init_mips
(fdsp);
138
#endif
139
}
Generated on Wed Jul 10 2013 23:48:15 for FFmpeg by
1.8.2