FFmpeg git repo
Go to file
Martin Storsjö 61b8a9ea29 aarch64: vp9itxfm16: Do a simpler half/quarter idct16/idct32 when possible
This work is sponsored by, and copyright, Google.

This avoids loading and calculating coefficients that we know will
be zero, and avoids filling the temp buffer with zeros in places
where we know the second pass won't read.

This gives a pretty substantial speedup for the smaller subpartitions.

The code size increases from 21512 bytes to 31400 bytes.

The idct16/32_end macros are moved above the individual functions; the
instructions themselves are unchanged, but since new functions are added
at the same place where the code is moved from, the diff looks rather
messy.

Before:
vp9_inv_dct_dct_16x16_sub1_add_10_neon:     284.6
vp9_inv_dct_dct_16x16_sub2_add_10_neon:    1902.7
vp9_inv_dct_dct_16x16_sub4_add_10_neon:    1903.0
vp9_inv_dct_dct_16x16_sub8_add_10_neon:    2201.1
vp9_inv_dct_dct_16x16_sub12_add_10_neon:   2510.0
vp9_inv_dct_dct_16x16_sub16_add_10_neon:   2821.3
vp9_inv_dct_dct_32x32_sub1_add_10_neon:    1011.6
vp9_inv_dct_dct_32x32_sub2_add_10_neon:    9716.5
vp9_inv_dct_dct_32x32_sub4_add_10_neon:    9704.9
vp9_inv_dct_dct_32x32_sub8_add_10_neon:   10641.7
vp9_inv_dct_dct_32x32_sub12_add_10_neon:  11555.7
vp9_inv_dct_dct_32x32_sub16_add_10_neon:  12499.8
vp9_inv_dct_dct_32x32_sub20_add_10_neon:  13403.7
vp9_inv_dct_dct_32x32_sub24_add_10_neon:  14335.8
vp9_inv_dct_dct_32x32_sub28_add_10_neon:  15253.6
vp9_inv_dct_dct_32x32_sub32_add_10_neon:  16179.5

After:
vp9_inv_dct_dct_16x16_sub1_add_10_neon:     282.8
vp9_inv_dct_dct_16x16_sub2_add_10_neon:    1142.4
vp9_inv_dct_dct_16x16_sub4_add_10_neon:    1139.0
vp9_inv_dct_dct_16x16_sub8_add_10_neon:    1772.9
vp9_inv_dct_dct_16x16_sub12_add_10_neon:   2515.2
vp9_inv_dct_dct_16x16_sub16_add_10_neon:   2823.5
vp9_inv_dct_dct_32x32_sub1_add_10_neon:    1012.7
vp9_inv_dct_dct_32x32_sub2_add_10_neon:    6944.4
vp9_inv_dct_dct_32x32_sub4_add_10_neon:    6944.2
vp9_inv_dct_dct_32x32_sub8_add_10_neon:    7609.8
vp9_inv_dct_dct_32x32_sub12_add_10_neon:   9953.4
vp9_inv_dct_dct_32x32_sub16_add_10_neon:  10770.1
vp9_inv_dct_dct_32x32_sub20_add_10_neon:  13418.8
vp9_inv_dct_dct_32x32_sub24_add_10_neon:  14330.7
vp9_inv_dct_dct_32x32_sub28_add_10_neon:  15257.1
vp9_inv_dct_dct_32x32_sub32_add_10_neon:  16190.6

Signed-off-by: Martin Storsjö <martin@martin.st>
2017-03-19 22:54:37 +02:00
compat compat/atomics/gcc: use __typeof__ instead of typeof 2017-03-18 12:13:46 -03:00
doc Merge commit '963b3ab11f98fcc4a311f0dc7b268890c5675da2' 2017-03-19 18:34:48 +01:00
libavcodec aarch64: vp9itxfm16: Do a simpler half/quarter idct16/idct32 when possible 2017-03-19 22:54:37 +02:00
libavdevice Merge commit '93fed46a92bab8be176d3e67be4354189a8dbe7f' 2017-03-19 16:08:27 +01:00
libavfilter lavfi: deprecate AVFilterGraph->resample_lavr_opts 2017-03-18 07:37:35 +00:00
libavformat Merge commit 'd42809f9835a4e9e5c7c63210abb09ad0ef19cfb' 2017-03-19 18:28:40 +01:00
libavresample
libavutil lavu/mathematics: split closing bracket out of ifdefery 2017-03-18 23:50:05 +01:00
libpostproc
libswresample swresample/x86/resample: extend resample_double to support avx and fma3 2017-03-19 12:24:41 +07:00
libswscale Merge commit 'aa37d2bf4505afc106e2a23c44afc722bb204a8e' 2017-03-19 15:40:03 +01:00
presets
tests Merge commit '87c6c78604e4dd16f1f45862b27ca006da010527' 2017-03-19 15:11:44 -03:00
tools
.gitattributes
.gitignore
.travis.yml
arch.mak
Changelog Merge commit '4fef648d10bf3bcfd4b8fa5755c1128966a2427c' 2017-03-15 22:07:47 +01:00
cmdutils_common_opts.h
cmdutils_opencl.c
cmdutils.c
cmdutils.h
common.mak
configure Merge commit '46e3936fb04d06550151e667357065e3f646da1a' 2017-03-19 18:21:56 +01:00
CONTRIBUTING.md
COPYING.GPLv2
COPYING.GPLv3
COPYING.LGPLv2.1
COPYING.LGPLv3
CREDITS
ffmpeg_cuvid.c
ffmpeg_dxva2.c
ffmpeg_filter.c ffmpeg: don't use resample_lavr_opts 2017-03-16 06:58:50 +00:00
ffmpeg_opt.c ffmpeg, ffprobe: don't "merge" side data into packet data by default 2017-03-14 23:37:28 +01:00
ffmpeg_qsv.c
ffmpeg_vaapi.c
ffmpeg_vdpau.c
ffmpeg_videotoolbox.c
ffmpeg.c ffmpeg: set the encoding framerate when the output is CFR 2017-03-17 11:54:38 +01:00
ffmpeg.h Merge commit 'b0f36a0043d76436cc7ab8ff92ab99c94595d3c0' 2017-03-12 13:08:04 +01:00
ffplay.c
ffprobe.c fate: Do not report side data size 2017-03-17 13:12:25 -04:00
ffserver_config.c
ffserver_config.h
ffserver.c
INSTALL.md
library.mak
LICENSE.md Merge commit '4fef648d10bf3bcfd4b8fa5755c1128966a2427c' 2017-03-15 22:07:47 +01:00
MAINTAINERS
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.