History

avfilter/bwdif: add avx2 filter_line function

James Darnley committed 3 years ago

Commit 073ec3b1 parent a9377232 files · +36 −5Browse files

Showing the changes to libavfilter (2 of 2 files). Show all

Unified · Split

2 files
  1. libavfilter/x86/vf_bwdif.asm +24 −5
  2. libavfilter/x86/vf_bwdif_init.c +12 −0
libavfilter/x86/vf_bwdif.asm+24−5
@@ -26,18 +26,22 @@ · 25 unmodified lines
2626
2727 %include "libavutil/x86/x86util.asm"
2828
29−SECTION_RODATA
29+SECTION_RODATA 32
3030
31−pw_coefhf: times 4 dw 1016, 5570
32−pw_coefhf1: times 8 dw -3801
33−pw_coefsp: times 4 dw 5077, -981
34−pw_splfdif: times 4 dw -768, 768
31+pw_coefhf: times 8 dw 1016, 5570
32+pw_coefhf1: times 16 dw -3801
33+pw_coefsp: times 8 dw 5077, -981
34+pw_splfdif: times 8 dw -768, 768
3535
3636 SECTION .text
3737
3838 %macro LOAD8 2
39+ %if mmsize == 32
40+ pmovzxbw %1, %2
41+ %else
3942 movh %1, %2
4043 punpcklbw %1, m7
44+ %endif
4145 %endmacro
4246
4347 %macro LOAD12 2
@@ -45,8 +49,14 @@ SECTION .text · 1 unmodified line
4549 %endmacro
4650
4751 %macro DISP8 0
52+ %if mmsize == 32
53+ vextracti128 xm1, m2, 1
54+ packuswb xm2, xm1
55+ movu [dstq], xm2
56+ %else
4857 packuswb m2, m2
4958 movh [dstq], m2
59+ %endif
5060 %endmacro
5161
5262 %macro DISP12 0
@@ -244,8 +254,12 @@ cglobal bwdif_filter_line_12bit, 4, 9, 13, 0, dst, prev, cur, next, w, \ · 191 unmodified lines
244254 prefs, mrefs, prefs2, mrefs2, \
245255 prefs3, mrefs3, prefs4, \
246256 mrefs4, parity, clip_max
257+ %if mmsize == 32
258+ vpbroadcastw m12, WORD clip_maxm
259+ %else
247260 movd m12, DWORD clip_maxm
248261 SPLATW m12, m12, 0
262+ %endif
249263 %else
250264 cglobal bwdif_filter_line_12bit, 4, 6, 8, 80, dst, prev, cur, next, w, \
251265 prefs, mrefs, prefs2, mrefs2, \
@@ -264,3 +278,8 @@ INIT_XMM ssse3 · 12 unmodified lines
264278 BWDIF
265279 INIT_XMM sse2
266280 BWDIF
281+
282+%if HAVE_AVX2_EXTERNAL && ARCH_X86_64
283+INIT_YMM avx2
284+BWDIF
285+%endif
libavfilter/x86/vf_bwdif_init.c+12−0
@@ -32,6 +32,10 @@ void ff_bwdif_filter_line_ssse3(void *dst, void *prev, void *cur, void *next, · 31 unmodified lines
3232 int w, int prefs, int mrefs, int prefs2,
3333 int mrefs2, int prefs3, int mrefs3, int prefs4,
3434 int mrefs4, int parity, int clip_max);
35+void ff_bwdif_filter_line_avx2(void *dst, void *prev, void *cur, void *next,
36+ int w, int prefs, int mrefs, int prefs2,
37+ int mrefs2, int prefs3, int mrefs3, int prefs4,
38+ int mrefs4, int parity, int clip_max);
3539
3640 void ff_bwdif_filter_line_12bit_sse2(void *dst, void *prev, void *cur, void *next,
3741 int w, int prefs, int mrefs, int prefs2,
@@ -41,6 +45,10 @@ void ff_bwdif_filter_line_12bit_ssse3(void *dst, void *prev, void *cur, void *ne · 3 unmodified lines
4145 int w, int prefs, int mrefs, int prefs2,
4246 int mrefs2, int prefs3, int mrefs3, int prefs4,
4347 int mrefs4, int parity, int clip_max);
48+void ff_bwdif_filter_line_12bit_avx2(void *dst, void *prev, void *cur, void *next,
49+ int w, int prefs, int mrefs, int prefs2,
50+ int mrefs2, int prefs3, int mrefs3, int prefs4,
51+ int mrefs4, int parity, int clip_max);
4452
4553 av_cold void ff_bwdif_init_x86(BWDIFContext *bwdif, int bit_depth)
4654 {
@@ -51,10 +59,14 @@ av_cold void ff_bwdif_init_x86(BWDIFContext *bwdif, int bit_depth) · 4 unmodified lines
5159 bwdif->filter_line = ff_bwdif_filter_line_sse2;
5260 if (EXTERNAL_SSSE3(cpu_flags))
5361 bwdif->filter_line = ff_bwdif_filter_line_ssse3;
62+ if (ARCH_X86_64 && EXTERNAL_AVX2(cpu_flags))
63+ bwdif->filter_line = ff_bwdif_filter_line_avx2;
5464 } else if (bit_depth <= 12) {
5565 if (EXTERNAL_SSE2(cpu_flags))
5666 bwdif->filter_line = ff_bwdif_filter_line_12bit_sse2;
5767 if (EXTERNAL_SSSE3(cpu_flags))
5868 bwdif->filter_line = ff_bwdif_filter_line_12bit_ssse3;
69+ if (ARCH_X86_64 && EXTERNAL_AVX2(cpu_flags))
70+ bwdif->filter_line = ff_bwdif_filter_line_12bit_avx2;
5971 }
6072 }

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t