Line | Branch | Exec | Source |
---|---|---|---|
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 "attributes.h" | ||
24 | #include "float_dsp.h" | ||
25 | #include "mem.h" | ||
26 | |||
27 | 532778 | static void vector_fmul_c(float *dst, const float *src0, const float *src1, | |
28 | int len) | ||
29 | { | ||
30 | int i; | ||
31 |
2/2✓ Branch 0 taken 60854144 times.
✓ Branch 1 taken 532778 times.
|
61386922 | for (i = 0; i < len; i++) |
32 | 60854144 | dst[i] = src0[i] * src1[i]; | |
33 | 532778 | } | |
34 | |||
35 | 3 | static void vector_dmul_c(double *dst, const double *src0, const double *src1, | |
36 | int len) | ||
37 | { | ||
38 | int i; | ||
39 |
2/2✓ Branch 0 taken 768 times.
✓ Branch 1 taken 3 times.
|
771 | for (i = 0; i < len; i++) |
40 | 768 | dst[i] = src0[i] * src1[i]; | |
41 | 3 | } | |
42 | |||
43 | 24592 | static void vector_fmac_scalar_c(float *dst, const float *src, float mul, | |
44 | int len) | ||
45 | { | ||
46 | int i; | ||
47 |
2/2✓ Branch 0 taken 11646368 times.
✓ Branch 1 taken 24592 times.
|
11670960 | for (i = 0; i < len; i++) |
48 | 11646368 | dst[i] += src[i] * mul; | |
49 | 24592 | } | |
50 | |||
51 | 3 | static void vector_dmac_scalar_c(double *dst, const double *src, double mul, | |
52 | int len) | ||
53 | { | ||
54 | int i; | ||
55 |
2/2✓ Branch 0 taken 768 times.
✓ Branch 1 taken 3 times.
|
771 | for (i = 0; i < len; i++) |
56 | 768 | dst[i] += src[i] * mul; | |
57 | 3 | } | |
58 | |||
59 | 859774 | static void vector_fmul_scalar_c(float *dst, const float *src, float mul, | |
60 | int len) | ||
61 | { | ||
62 | int i; | ||
63 |
2/2✓ Branch 0 taken 21706048 times.
✓ Branch 1 taken 859774 times.
|
22565822 | for (i = 0; i < len; i++) |
64 | 21706048 | dst[i] = src[i] * mul; | |
65 | 859774 | } | |
66 | |||
67 | 3 | static void vector_dmul_scalar_c(double *dst, const double *src, double mul, | |
68 | int len) | ||
69 | { | ||
70 | int i; | ||
71 |
2/2✓ Branch 0 taken 768 times.
✓ Branch 1 taken 3 times.
|
771 | for (i = 0; i < len; i++) |
72 | 768 | dst[i] = src[i] * mul; | |
73 | 3 | } | |
74 | |||
75 | 221441 | static void vector_fmul_window_c(float *dst, const float *src0, | |
76 | const float *src1, const float *win, int len) | ||
77 | { | ||
78 | int i, j; | ||
79 | |||
80 | 221441 | dst += len; | |
81 | 221441 | win += len; | |
82 | 221441 | src0 += len; | |
83 | |||
84 |
2/2✓ Branch 0 taken 44044756 times.
✓ Branch 1 taken 221441 times.
|
44266197 | for (i = -len, j = len - 1; i < 0; i++, j--) { |
85 | 44044756 | float s0 = src0[i]; | |
86 | 44044756 | float s1 = src1[j]; | |
87 | 44044756 | float wi = win[i]; | |
88 | 44044756 | float wj = win[j]; | |
89 | 44044756 | dst[i] = s0 * wj - s1 * wi; | |
90 | 44044756 | dst[j] = s0 * wi + s1 * wj; | |
91 | } | ||
92 | 221441 | } | |
93 | |||
94 | 3865569 | static void vector_fmul_add_c(float *dst, const float *src0, const float *src1, | |
95 | const float *src2, int len){ | ||
96 | int i; | ||
97 | |||
98 |
2/2✓ Branch 0 taken 231203968 times.
✓ Branch 1 taken 3865569 times.
|
235069537 | for (i = 0; i < len; i++) |
99 | 231203968 | dst[i] = src0[i] * src1[i] + src2[i]; | |
100 | 3865569 | } | |
101 | |||
102 | 406185 | static void vector_fmul_reverse_c(float *dst, const float *src0, | |
103 | const float *src1, int len) | ||
104 | { | ||
105 | int i; | ||
106 | |||
107 | 406185 | src1 += len-1; | |
108 |
2/2✓ Branch 0 taken 133324672 times.
✓ Branch 1 taken 406185 times.
|
133730857 | for (i = 0; i < len; i++) |
109 | 133324672 | dst[i] = src0[i] * src1[-i]; | |
110 | 406185 | } | |
111 | |||
112 | 589994 | static void butterflies_float_c(float *restrict v1, float *restrict v2, | |
113 | int len) | ||
114 | { | ||
115 | int i; | ||
116 | |||
117 |
2/2✓ Branch 0 taken 8691336 times.
✓ Branch 1 taken 589994 times.
|
9281330 | for (i = 0; i < len; i++) { |
118 | 8691336 | float t = v1[i] - v2[i]; | |
119 | 8691336 | v1[i] += v2[i]; | |
120 | 8691336 | v2[i] = t; | |
121 | } | ||
122 | 589994 | } | |
123 | |||
124 | 836465 | double ff_scalarproduct_double_c(const double *v1, const double *v2, | |
125 | size_t len) | ||
126 | { | ||
127 | 836465 | double p = 0.0; | |
128 | |||
129 |
2/2✓ Branch 0 taken 6692578 times.
✓ Branch 1 taken 836465 times.
|
7529043 | for (size_t i = 0; i < len; i++) |
130 | 6692578 | p += v1[i] * v2[i]; | |
131 | |||
132 | 836465 | return p; | |
133 | } | ||
134 | |||
135 | 1019 | av_cold AVFloatDSPContext *avpriv_float_dsp_alloc(int bit_exact) | |
136 | { | ||
137 | 1019 | AVFloatDSPContext *fdsp = av_mallocz(sizeof(AVFloatDSPContext)); | |
138 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1019 times.
|
1019 | if (!fdsp) |
139 | ✗ | return NULL; | |
140 | |||
141 | 1019 | fdsp->vector_fmul = vector_fmul_c; | |
142 | 1019 | fdsp->vector_dmul = vector_dmul_c; | |
143 | 1019 | fdsp->vector_fmac_scalar = vector_fmac_scalar_c; | |
144 | 1019 | fdsp->vector_fmul_scalar = vector_fmul_scalar_c; | |
145 | 1019 | fdsp->vector_dmac_scalar = vector_dmac_scalar_c; | |
146 | 1019 | fdsp->vector_dmul_scalar = vector_dmul_scalar_c; | |
147 | 1019 | fdsp->vector_fmul_window = vector_fmul_window_c; | |
148 | 1019 | fdsp->vector_fmul_add = vector_fmul_add_c; | |
149 | 1019 | fdsp->vector_fmul_reverse = vector_fmul_reverse_c; | |
150 | 1019 | fdsp->butterflies_float = butterflies_float_c; | |
151 | 1019 | fdsp->scalarproduct_float = ff_scalarproduct_float_c; | |
152 | 1019 | fdsp->scalarproduct_double = ff_scalarproduct_double_c; | |
153 | |||
154 | #if ARCH_AARCH64 | ||
155 | ff_float_dsp_init_aarch64(fdsp); | ||
156 | #elif ARCH_ARM | ||
157 | ff_float_dsp_init_arm(fdsp); | ||
158 | #elif ARCH_PPC | ||
159 | ff_float_dsp_init_ppc(fdsp, bit_exact); | ||
160 | #elif ARCH_RISCV | ||
161 | ff_float_dsp_init_riscv(fdsp); | ||
162 | #elif ARCH_X86 | ||
163 | 1019 | ff_float_dsp_init_x86(fdsp); | |
164 | #elif ARCH_MIPS | ||
165 | ff_float_dsp_init_mips(fdsp); | ||
166 | #endif | ||
167 | 1019 | return fdsp; | |
168 | } | ||
169 |