mirror of
https://mirror.skon.top/https://github.com/FFmpeg/FFmpeg
synced 2026-04-20 21:00:41 +08:00
This commit pieces together the previous few commits to implement the NEON backend for sws_ops. In essence, a tool which runs on the target (sws_ops_aarch64) is used to enumerate all the functions that the backend needs to implement. The list it generates is stored in the repository (ops_entries.c). The list from above is used at build time by a code generator tool (ops_asmgen) to implement all the sws_ops functions the NEON backend supports, and generate a lookup function in C to retrieve the assembly function pointers. At runtime, the NEON backend fetches the function pointers to the assembly functions and chains them together in a continuation-passing style design, similar to the x86 backend. The following speedup is observed from legacy swscale to NEON: A520: Overall speedup=3.780x faster, min=0.137x max=91.928x A720: Overall speedup=4.129x faster, min=0.234x max=92.424x And the following from the C sws_ops implementation to NEON: A520: Overall speedup=5.513x faster, min=0.927x max=14.169x A720: Overall speedup=4.786x faster, min=0.585x max=20.157x The slowdowns from legacy to NEON are the same for C/x86. Mostly low bit-depth conversions that did not perform dithering in legacy. The 0.585x outlier from C to NEON is gbrpf32le -> gbrapf32le, which is mostly memcpy with the C implementation. All other conversions are better. Sponsored-by: Sovereign Tech Fund Signed-off-by: Ramiro Polla <ramiro.polla@gmail.com>
55 lines
482 B
Plaintext
55 lines
482 B
Plaintext
*.a
|
|
*.o
|
|
*.objs
|
|
*.o.*
|
|
*.d
|
|
*.def
|
|
*.dll
|
|
*.dylib
|
|
*.exe
|
|
*.exp
|
|
*.gcda
|
|
*.gcno
|
|
*.h.c
|
|
*.ilk
|
|
*.lib
|
|
*.pc
|
|
*.pdb
|
|
*.so
|
|
*.so.*
|
|
*.swp
|
|
*.ver
|
|
*.version
|
|
*.metal.air
|
|
*.metallib
|
|
*.metallib.c
|
|
*.spv
|
|
*.spv.c
|
|
*.spv.gz
|
|
*.gen.c
|
|
*.gen.S
|
|
*.ptx
|
|
*.ptx.c
|
|
*.ptx.gz
|
|
*_g
|
|
\#*
|
|
.\#*
|
|
/.config
|
|
/.version
|
|
/ffmpeg
|
|
/ffplay
|
|
/ffprobe
|
|
/config.asm
|
|
/config.h
|
|
/config_components.asm
|
|
/config_components.h
|
|
/coverage.info
|
|
/lcov/
|
|
/src
|
|
/mapfile
|
|
/tools/python/__pycache__/
|
|
/libavcodec/vulkan/*.c
|
|
/libavfilter/vulkan/*.c
|
|
/.*/
|
|
!/.forgejo/
|