FFmpeg coverage


Directory: ../../../ffmpeg/
File: src/libavutil/float_dsp.c
Date: 2024-11-20 23:03:26
Exec Total Coverage
Lines: 78 79 98.7%
Functions: 13 13 100.0%
Branches: 25 26 96.2%

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 533733 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 61685120 times.
✓ Branch 1 taken 533733 times.
62218853 for (i = 0; i < len; i++)
32 61685120 dst[i] = src0[i] * src1[i];
33 533733 }
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 24606 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 11660704 times.
✓ Branch 1 taken 24606 times.
11685310 for (i = 0; i < len; i++)
48 11660704 dst[i] += src[i] * mul;
49 24606 }
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 863113 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 21726672 times.
✓ Branch 1 taken 863113 times.
22589785 for (i = 0; i < len; i++)
64 21726672 dst[i] = src[i] * mul;
65 863113 }
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 222283 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 222283 dst += len;
81 222283 win += len;
82 222283 src0 += len;
83
84
2/2
✓ Branch 0 taken 44435460 times.
✓ Branch 1 taken 222283 times.
44657743 for (i = -len, j = len - 1; i < 0; i++, j--) {
85 44435460 float s0 = src0[i];
86 44435460 float s1 = src1[j];
87 44435460 float wi = win[i];
88 44435460 float wj = win[j];
89 44435460 dst[i] = s0 * wj - s1 * wi;
90 44435460 dst[j] = s0 * wi + s1 * wj;
91 }
92 222283 }
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 407140 static void vector_fmul_reverse_c(float *dst, const float *src0,
103 const float *src1, int len)
104 {
105 int i;
106
107 407140 src1 += len-1;
108
2/2
✓ Branch 0 taken 134153856 times.
✓ Branch 1 taken 407140 times.
134560996 for (i = 0; i < len; i++)
109 134153856 dst[i] = src0[i] * src1[-i];
110 407140 }
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 1419518 float avpriv_scalarproduct_float_c(const float *v1, const float *v2, int len)
125 {
126 1419518 float p = 0.0;
127 int i;
128
129
2/2
✓ Branch 0 taken 44109540 times.
✓ Branch 1 taken 1419518 times.
45529058 for (i = 0; i < len; i++)
130 44109540 p += v1[i] * v2[i];
131
132 1419518 return p;
133 }
134
135 836465 double ff_scalarproduct_double_c(const double *v1, const double *v2,
136 size_t len)
137 {
138 836465 double p = 0.0;
139
140
2/2
✓ Branch 0 taken 6692578 times.
✓ Branch 1 taken 836465 times.
7529043 for (size_t i = 0; i < len; i++)
141 6692578 p += v1[i] * v2[i];
142
143 836465 return p;
144 }
145
146 990 av_cold AVFloatDSPContext *avpriv_float_dsp_alloc(int bit_exact)
147 {
148 990 AVFloatDSPContext *fdsp = av_mallocz(sizeof(AVFloatDSPContext));
149
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 990 times.
990 if (!fdsp)
150 return NULL;
151
152 990 fdsp->vector_fmul = vector_fmul_c;
153 990 fdsp->vector_dmul = vector_dmul_c;
154 990 fdsp->vector_fmac_scalar = vector_fmac_scalar_c;
155 990 fdsp->vector_fmul_scalar = vector_fmul_scalar_c;
156 990 fdsp->vector_dmac_scalar = vector_dmac_scalar_c;
157 990 fdsp->vector_dmul_scalar = vector_dmul_scalar_c;
158 990 fdsp->vector_fmul_window = vector_fmul_window_c;
159 990 fdsp->vector_fmul_add = vector_fmul_add_c;
160 990 fdsp->vector_fmul_reverse = vector_fmul_reverse_c;
161 990 fdsp->butterflies_float = butterflies_float_c;
162 990 fdsp->scalarproduct_float = avpriv_scalarproduct_float_c;
163 990 fdsp->scalarproduct_double = ff_scalarproduct_double_c;
164
165 #if ARCH_AARCH64
166 ff_float_dsp_init_aarch64(fdsp);
167 #elif ARCH_ARM
168 ff_float_dsp_init_arm(fdsp);
169 #elif ARCH_PPC
170 ff_float_dsp_init_ppc(fdsp, bit_exact);
171 #elif ARCH_RISCV
172 ff_float_dsp_init_riscv(fdsp);
173 #elif ARCH_X86
174 990 ff_float_dsp_init_x86(fdsp);
175 #elif ARCH_MIPS
176 ff_float_dsp_init_mips(fdsp);
177 #endif
178 990 return fdsp;
179 }
180