FFmpeg coverage


Directory: ../../../ffmpeg/
File: src/libavcodec/x86/ac3dsp_init.c
Date: 2022-12-09 07:38:14
Exec Total Coverage
Lines: 18 18 100.0%
Functions: 2 2 100.0%
Branches: 30 80 37.5%

Line Branch Exec Source
1 /*
2 * x86-optimized AC-3 DSP functions
3 * Copyright (c) 2011 Justin Ruggles
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 "libavutil/attributes.h"
23 #include "libavutil/x86/asm.h"
24 #include "libavutil/x86/cpu.h"
25 #include "libavcodec/ac3dsp.h"
26
27 void ff_ac3_exponent_min_sse2 (uint8_t *exp, int num_reuse_blocks, int nb_coefs);
28
29 void ff_float_to_fixed24_sse2 (int32_t *dst, const float *src, unsigned int len);
30
31 int ff_ac3_compute_mantissa_size_sse2(uint16_t mant_cnt[6][16]);
32
33 void ff_ac3_extract_exponents_sse2 (uint8_t *exp, int32_t *coef, int nb_coefs);
34 void ff_ac3_extract_exponents_ssse3(uint8_t *exp, int32_t *coef, int nb_coefs);
35
36 97 av_cold void ff_ac3dsp_init_x86(AC3DSPContext *c)
37 {
38 97 int cpu_flags = av_get_cpu_flags();
39
40
2/2
✓ Branch 0 taken 26 times.
✓ Branch 1 taken 71 times.
97 if (EXTERNAL_SSE2(cpu_flags)) {
41 26 c->ac3_exponent_min = ff_ac3_exponent_min_sse2;
42 26 c->float_to_fixed24 = ff_float_to_fixed24_sse2;
43 26 c->compute_mantissa_size = ff_ac3_compute_mantissa_size_sse2;
44 26 c->extract_exponents = ff_ac3_extract_exponents_sse2;
45 }
46
47
2/2
✓ Branch 0 taken 26 times.
✓ Branch 1 taken 71 times.
97 if (EXTERNAL_SSSE3(cpu_flags)) {
48
1/2
✓ Branch 0 taken 26 times.
✗ Branch 1 not taken.
26 if (!(cpu_flags & AV_CPU_FLAG_ATOM))
49 26 c->extract_exponents = ff_ac3_extract_exponents_ssse3;
50 }
51 97 }
52
53 #define DOWNMIX_FUNC_OPT(ch, opt) \
54 void ff_ac3_downmix_ ## ch ## _to_1_ ## opt(float **samples, \
55 float **matrix, int len); \
56 void ff_ac3_downmix_ ## ch ## _to_2_ ## opt(float **samples, \
57 float **matrix, int len);
58
59 #define DOWNMIX_FUNCS(opt) \
60 DOWNMIX_FUNC_OPT(3, opt) \
61 DOWNMIX_FUNC_OPT(4, opt) \
62 DOWNMIX_FUNC_OPT(5, opt) \
63 DOWNMIX_FUNC_OPT(6, opt)
64
65 DOWNMIX_FUNCS(sse)
66 DOWNMIX_FUNCS(avx)
67 DOWNMIX_FUNCS(fma3)
68
69 11 void ff_ac3dsp_set_downmix_x86(AC3DSPContext *c)
70 {
71 11 int cpu_flags = av_get_cpu_flags();
72
73 #define SET_DOWNMIX(ch, suf, SUF) \
74 if (ch == c->in_channels) { \
75 if (EXTERNAL_ ## SUF (cpu_flags)) { \
76 if (c->out_channels == 1) \
77 c->downmix = ff_ac3_downmix_ ## ch ## _to_1_ ## suf; \
78 else \
79 c->downmix = ff_ac3_downmix_ ## ch ## _to_2_ ## suf; \
80 } \
81 }
82
83 #define SET_DOWNMIX_ALL(suf, SUF) \
84 SET_DOWNMIX(3, suf, SUF) \
85 SET_DOWNMIX(4, suf, SUF) \
86 SET_DOWNMIX(5, suf, SUF) \
87 SET_DOWNMIX(6, suf, SUF)
88
89
8/24
✗ Branch 0 not taken.
✓ Branch 1 taken 11 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 5 times.
✓ Branch 7 taken 6 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 5 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 6 times.
✓ Branch 13 taken 5 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 6 times.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 11 times.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
11 SET_DOWNMIX_ALL(sse, SSE)
90
1/2
✓ Branch 0 taken 11 times.
✗ Branch 1 not taken.
11 if (!(cpu_flags & AV_CPU_FLAG_AVXSLOW)) {
91
8/24
✗ Branch 0 not taken.
✓ Branch 1 taken 11 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 5 times.
✓ Branch 7 taken 6 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 5 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 6 times.
✓ Branch 13 taken 5 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 6 times.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 11 times.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
11 SET_DOWNMIX_ALL(avx, AVX)
92
8/24
✗ Branch 0 not taken.
✓ Branch 1 taken 11 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 5 times.
✓ Branch 7 taken 6 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 5 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 6 times.
✓ Branch 13 taken 5 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 6 times.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 11 times.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
11 SET_DOWNMIX_ALL(fma3, FMA3)
93 }
94 11 }
95