ffmpeg/libswscale
Swinney, Jonathan 0ea61725b1 swscale/aarch64: add hscale specializations
This patch adds code to support specializations of the hscale function
and adds a specialization for filterSize == 4.

ff_hscale8to15_4_neon is a complete rewrite. Since the main bottleneck
here is loading the data from src, this data is loaded a whole block
ahead and stored back to the stack to be loaded again with ld4. This
arranges the data for most efficient use of the vector instructions and
removes the need for completion adds at the end. The number of
iterations of the C per iteration of the assembly is increased from 4 to
8, but because of the prefetching, there must be a special section
without prefetching when dstW < 16.

This improves speed on Graviton 2 (Neoverse N1) dramatically in the case
where previously fs=8 would have been required.

before: hscale_8_to_15__fs_8_dstW_512_neon: 1962.8
after : hscale_8_to_15__fs_4_dstW_512_neon: 1220.9

Signed-off-by: Jonathan Swinney <jswinney@amazon.com>
Signed-off-by: Martin Storsjö <martin@martin.st>
2022-05-28 01:09:05 +03:00
..
aarch64 swscale/aarch64: add hscale specializations 2022-05-28 01:09:05 +03:00
arm
ppc
tests swscale: introduce isSwappedChroma 2022-01-04 19:39:22 -06:00
x86 swscale/x86/swscale: Remove superfluous and invalid ';' 2022-01-22 17:00:45 +01:00
Makefile lib*/version: Move library version functions into files of their own 2022-05-10 06:49:32 +02:00
alphablend.c swscale/alphablend: Fix slice handling 2021-10-03 20:38:29 +02:00
bayer_template.c
gamma.c
hscale.c
hscale_fast_bilinear.c
input.c Remove unnecessary libavutil/(avutil|common|internal).h inclusions 2022-02-24 12:56:49 +01:00
libswscale.v
log2_tab.c
options.c Remove unnecessary libavutil/(avutil|common|internal).h inclusions 2022-02-24 12:56:49 +01:00
output.c swscale/output: use isSwappedChroma 2022-01-04 19:39:22 -06:00
rgb2rgb.c
rgb2rgb.h Remove unnecessary libavutil/(avutil|common|internal).h inclusions 2022-02-24 12:56:49 +01:00
rgb2rgb_template.c
slice.c Replace all occurences of av_mallocz_array() by av_calloc() 2021-09-20 01:03:52 +02:00
swscale.c Remove unnecessary libavutil/(avutil|common|internal).h inclusions 2022-02-24 12:56:49 +01:00
swscale.h Keep including the full version.h when headers are included externally 2022-03-19 00:01:57 +02:00
swscale_internal.h Remove unnecessary libavutil/(avutil|common|internal).h inclusions 2022-02-24 12:56:49 +01:00
swscale_unscaled.c
swscaleres.rc
utils.c swscale/aarch64: add hscale specializations 2022-05-28 01:09:05 +03:00
version.c lib*/version: Move library version functions into files of their own 2022-05-10 06:49:32 +02:00
version.h doc: Add an entry to APIchanges about changes to version.h and version_major.h 2022-03-16 14:12:46 +02:00
version_major.h libswscale: Split version.h 2022-03-16 14:05:26 +02:00
vscale.c Replace all occurences of av_mallocz_array() by av_calloc() 2021-09-20 01:03:52 +02:00
yuv2rgb.c swscale/yuv2rgb: Silence a set-but-unused-variable warning 2021-12-03 16:10:51 +01:00