1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2025-01-13 21:28:01 +02:00
Go to file
Martin Storsjö f43079e11c aarch64: vp9: Add NEON itxfm routines
This work is sponsored by, and copyright, Google.

These are ported from the ARM version; thanks to the larger
amount of registers available, we can do the 16x16 and 32x32
transforms in slices 8 pixels wide instead of 4. This gives
a speedup of around 1.4x compared to the 32 bit version.

The fact that aarch64 doesn't have the same d/q register
aliasing makes some of the macros quite a bit simpler as well.

Examples of runtimes vs the 32 bit version, on a Cortex A53:
                                       ARM  AArch64
vp9_inv_adst_adst_4x4_add_neon:       90.0     87.7
vp9_inv_adst_adst_8x8_add_neon:      400.0    354.7
vp9_inv_adst_adst_16x16_add_neon:   2526.5   1827.2
vp9_inv_dct_dct_4x4_add_neon:         74.0     72.7
vp9_inv_dct_dct_8x8_add_neon:        271.0    256.7
vp9_inv_dct_dct_16x16_add_neon:     1960.7   1372.7
vp9_inv_dct_dct_32x32_add_neon:    11988.9   8088.3
vp9_inv_wht_wht_4x4_add_neon:         63.0     57.7

The speedup vs C code (2-4x) is smaller than in the 32 bit case,
mostly because the C code ends up significantly faster (around
1.6x faster, with GCC 5.4) when built for aarch64.

Examples of runtimes vs C on a Cortex A57 (for a slightly older version
of the patch):
                                A57 gcc-5.3   neon
vp9_inv_adst_adst_4x4_add_neon:       152.2   60.0
vp9_inv_adst_adst_8x8_add_neon:       948.2  288.0
vp9_inv_adst_adst_16x16_add_neon:    4830.4 1380.5
vp9_inv_dct_dct_4x4_add_neon:         153.0   58.6
vp9_inv_dct_dct_8x8_add_neon:         789.2  180.2
vp9_inv_dct_dct_16x16_add_neon:      3639.6  917.1
vp9_inv_dct_dct_32x32_add_neon:     20462.1 4985.0
vp9_inv_wht_wht_4x4_add_neon:          91.0   49.8

The asm is around factor 3-4 faster than C on the cortex-a57 and the asm
is around 30-50% faster on the a57 compared to the a53.

This is an adapted cherry-pick from libav commit
3c9546dfaf.

Signed-off-by: Ronald S. Bultje <rsbultje@gmail.com>
2016-11-15 15:10:03 -05:00
compat compat/w32dlfcn.h: Add safe win32 dlopen/dlclose/dlsym functions. 2016-11-05 18:08:32 +11:00
doc doc/filters: add metadata information for blackframe 2016-11-14 11:59:52 -09:00
libavcodec aarch64: vp9: Add NEON itxfm routines 2016-11-15 15:10:03 -05:00
libavdevice lavd/xcbgrab: do not try to create refcounted packets. 2016-11-03 21:23:55 +01:00
libavfilter lavfi/ebur128: use ff_ prefix 2016-11-13 19:11:07 -06:00
libavformat lavf/Makefile: Fix rule for the data muxer. 2016-11-14 13:33:22 +01:00
libavresample
libavutil aarch64: Add an offset parameter to the movrel macro 2016-11-15 15:10:03 -05:00
libpostproc
libswresample
libswscale lsws: Add GRAY10 conversion. 2016-11-14 10:35:06 +01:00
presets
tests Merge commit 'f8d17d53957056c053a46f9320fa7ae6fe1479a5' 2016-11-14 15:29:08 +01:00
tools tools: add loudnorm script example to use loudnorm 2016-11-11 19:22:52 +01:00
.gitattributes
.gitignore
.travis.yml
arch.mak
Changelog avformat: Add Pro-MPEG CoP #3-R2 FEC protocol 2016-11-13 11:38:15 +01:00
cmdutils_common_opts.h cmdutils: add show_demuxers and show_muxers 2016-11-08 01:56:31 +01:00
cmdutils_opencl.c
cmdutils.c cmdutils: add show_demuxers and show_muxers 2016-11-08 01:56:31 +01:00
cmdutils.h cmdutils: add show_demuxers and show_muxers 2016-11-08 01:56:31 +01:00
common.mak
configure Merge commit '8c929037ec75fbe9f367e0a31ee34839e92de481' 2016-11-14 10:09:44 +01:00
CONTRIBUTING.md
COPYING.GPLv2
COPYING.GPLv3
COPYING.LGPLv2.1
COPYING.LGPLv3
CREDITS
ffmpeg_cuvid.c
ffmpeg_dxva2.c
ffmpeg_filter.c Merge commit '50722b4f0cbc5940e9e6e21d113888436cc89ff5' 2016-11-13 15:33:39 +01:00
ffmpeg_opt.c Merge commit '50722b4f0cbc5940e9e6e21d113888436cc89ff5' 2016-11-13 15:33:39 +01:00
ffmpeg_qsv.c ffmpeg_qsv: Fix hwaccel transcoding 2016-11-13 17:49:48 +00:00
ffmpeg_vaapi.c
ffmpeg_vdpau.c
ffmpeg_videotoolbox.c
ffmpeg.c Merge commit 'b55566db4c51d920a6496455bb30a608e5a50a41' 2016-11-14 14:56:52 +01:00
ffmpeg.h Merge commit '50722b4f0cbc5940e9e6e21d113888436cc89ff5' 2016-11-13 15:33:39 +01:00
ffplay.c
ffprobe.c
ffserver_config.c ffserver: Throw ffm.h out its not used except for a constant that is part of the format 2016-11-07 19:27:40 +01:00
ffserver_config.h ffserver: Throw ffm.h out its not used except for a constant that is part of the format 2016-11-07 19:27:40 +01:00
ffserver.c ffserver: use AVStream.codecpar in open_input_stream() 2016-11-08 12:12:19 +01:00
INSTALL.md
library.mak
LICENSE.md
MAINTAINERS MAINTAINERS: Add myself to flvenc 2016-11-09 17:49:19 +01:00
Makefile
README.md
RELEASE
version.sh

FFmpeg README

FFmpeg is a collection of libraries and tools to process multimedia content such as audio, video, subtitles and related metadata.

Libraries

  • libavcodec provides implementation of a wider range of codecs.
  • libavformat implements streaming protocols, container formats and basic I/O access.
  • libavutil includes hashers, decompressors and miscellaneous utility functions.
  • libavfilter provides a mean to alter decoded Audio and Video through chain of filters.
  • libavdevice provides an abstraction to access capture and playback devices.
  • libswresample implements audio mixing and resampling routines.
  • libswscale implements color conversion and scaling routines.

Tools

  • ffmpeg is a command line toolbox to manipulate, convert and stream multimedia content.
  • ffplay is a minimalistic multimedia player.
  • ffprobe is a simple analysis tool to inspect multimedia content.
  • ffserver is a multimedia streaming server for live broadcasts.
  • Additional small tools such as aviocat, ismindex and qt-faststart.

Documentation

The offline documentation is available in the doc/ directory.

The online documentation is available in the main website and in the wiki.

Examples

Coding examples are available in the doc/examples directory.

License

FFmpeg codebase is mainly LGPL-licensed with optional components licensed under GPL. Please refer to the LICENSE file for detailed information.

Contributing

Patches should be submitted to the ffmpeg-devel mailing list using git format-patch or git send-email. Github pull requests should be avoided because they are not part of our review process and will be ignored.