FFmpeg coverage


Directory: ../../../ffmpeg/
File: src/libavutil/float_dsp.c
Date: 2024-05-03 05:27:13
Exec Total Coverage
Lines: 72 73 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 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 24662 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 11718048 times.
✓ Branch 1 taken 24662 times.
11742710 for (i = 0; i < len; i++)
48 11718048 dst[i] += src[i] * mul;
49 24662 }
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 523889 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 13772240 times.
✓ Branch 1 taken 523889 times.
14296129 for (i = 0; i < len; i++)
64 13772240 dst[i] = src[i] * mul;
65 523889 }
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 214450 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 214450 dst += len;
81 214450 win += len;
82 214450 src0 += len;
83
84
2/2
✓ Branch 0 taken 40452612 times.
✓ Branch 1 taken 214450 times.
40667062 for (i = -len, j = len - 1; i < 0; i++, j--) {
85 40452612 float s0 = src0[i];
86 40452612 float s1 = src1[j];
87 40452612 float wi = win[i];
88 40452612 float wj = win[j];
89 40452612 dst[i] = s0 * wj - s1 * wi;
90 40452612 dst[j] = s0 * wi + s1 * wj;
91 }
92 214450 }
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 505494 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 7582588 times.
✓ Branch 1 taken 505494 times.
8088082 for (i = 0; i < len; i++) {
118 7582588 float t = v1[i] - v2[i];
119 7582588 v1[i] += v2[i];
120 7582588 v2[i] = t;
121 }
122 505494 }
123
124 1419486 float avpriv_scalarproduct_float_c(const float *v1, const float *v2, int len)
125 {
126 1419486 float p = 0.0;
127 int i;
128
129
2/2
✓ Branch 0 taken 44108228 times.
✓ Branch 1 taken 1419486 times.
45527714 for (i = 0; i < len; i++)
130 44108228 p += v1[i] * v2[i];
131
132 1419486 return p;
133 }
134
135 977 av_cold AVFloatDSPContext *avpriv_float_dsp_alloc(int bit_exact)
136 {
137 977 AVFloatDSPContext *fdsp = av_mallocz(sizeof(AVFloatDSPContext));
138
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 977 times.
977 if (!fdsp)
139 return NULL;
140
141 977 fdsp->vector_fmul = vector_fmul_c;
142 977 fdsp->vector_dmul = vector_dmul_c;
143 977 fdsp->vector_fmac_scalar = vector_fmac_scalar_c;
144 977 fdsp->vector_fmul_scalar = vector_fmul_scalar_c;
145 977 fdsp->vector_dmac_scalar = vector_dmac_scalar_c;
146 977 fdsp->vector_dmul_scalar = vector_dmul_scalar_c;
147 977 fdsp->vector_fmul_window = vector_fmul_window_c;
148 977 fdsp->vector_fmul_add = vector_fmul_add_c;
149 977 fdsp->vector_fmul_reverse = vector_fmul_reverse_c;
150 977 fdsp->butterflies_float = butterflies_float_c;
151 977 fdsp->scalarproduct_float = avpriv_scalarproduct_float_c;
152
153 #if ARCH_AARCH64
154 ff_float_dsp_init_aarch64(fdsp);
155 #elif ARCH_ARM
156 ff_float_dsp_init_arm(fdsp);
157 #elif ARCH_PPC
158 ff_float_dsp_init_ppc(fdsp, bit_exact);
159 #elif ARCH_RISCV
160 ff_float_dsp_init_riscv(fdsp);
161 #elif ARCH_X86
162 977 ff_float_dsp_init_x86(fdsp);
163 #elif ARCH_MIPS
164 ff_float_dsp_init_mips(fdsp);
165 #endif
166 977 return fdsp;
167 }
168