FFmpeg coverage


Directory: ../../../ffmpeg/
File: src/libavutil/float_dsp.c
Date: 2025-04-25 22:50:00
Exec Total Coverage
Lines: 73 74 98.6%
Functions: 12 12 100.0%
Branches: 23 24 95.8%

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