Andreas Rheinhardt 55bdc109a1 avcodec/x86/vc1dsp_loopfilter: Avoid unnecessary PABSW
The loop filter is only active if min(a1,a2)<abs(a0)
which is done via masking. Ergo the sign of min(a1,a2)-abs(a0)
is known (always negative) and one does not need to use
PABSW to get its absolute value.

This gives a small speedup. Old benchmarks:
  vc1dsp.vc1_h_loop_filter4_bestcase_c:            3.1
  vc1dsp.vc1_h_loop_filter4_bestcase_ssse3:       33.6 ( 0.09x)
  vc1dsp.vc1_h_loop_filter4_worstcase_c:          43.0
  vc1dsp.vc1_h_loop_filter4_worstcase_ssse3:      33.4 ( 1.29x)
  vc1dsp.vc1_h_loop_filter8_bestcase_c:            6.0
  vc1dsp.vc1_h_loop_filter8_bestcase_sse2:        38.4 ( 0.16x)
  vc1dsp.vc1_h_loop_filter8_bestcase_ssse3:       37.2 ( 0.16x)
  vc1dsp.vc1_h_loop_filter8_bestcase_sse4:        37.6 ( 0.16x)
  vc1dsp.vc1_h_loop_filter8_worstcase_c:          87.5
  vc1dsp.vc1_h_loop_filter8_worstcase_sse2:       38.4 ( 2.28x)
  vc1dsp.vc1_h_loop_filter8_worstcase_ssse3:      37.6 ( 2.32x)
  vc1dsp.vc1_h_loop_filter8_worstcase_sse4:       37.6 ( 2.32x)
  vc1dsp.vc1_h_loop_filter16_bestcase_c:          11.7
  vc1dsp.vc1_h_loop_filter16_bestcase_sse2:       42.0 ( 0.28x)
  vc1dsp.vc1_h_loop_filter16_bestcase_ssse3:      41.4 ( 0.28x)
  vc1dsp.vc1_h_loop_filter16_bestcase_sse4:       44.8 ( 0.26x)
  vc1dsp.vc1_h_loop_filter16_worstcase_c:        167.2
  vc1dsp.vc1_h_loop_filter16_worstcase_sse2:      41.8 ( 4.00x)
  vc1dsp.vc1_h_loop_filter16_worstcase_ssse3:     41.7 ( 3.92x)
  vc1dsp.vc1_h_loop_filter16_worstcase_sse4:      45.3 ( 3.69x)
  vc1dsp.vc1_v_loop_filter4_bestcase_c:            3.6
  vc1dsp.vc1_v_loop_filter4_bestcase_ssse3:       17.1 ( 0.21x)
  vc1dsp.vc1_v_loop_filter4_worstcase_c:          49.3
  vc1dsp.vc1_v_loop_filter4_worstcase_ssse3:      17.0 ( 2.89x)
  vc1dsp.vc1_v_loop_filter8_bestcase_c:            6.3
  vc1dsp.vc1_v_loop_filter8_bestcase_sse2:        17.7 ( 0.36x)
  vc1dsp.vc1_v_loop_filter8_bestcase_ssse3:       16.8 ( 0.38x)
  vc1dsp.vc1_v_loop_filter8_worstcase_c:          85.8
  vc1dsp.vc1_v_loop_filter8_worstcase_sse2:       17.7 ( 4.83x)
  vc1dsp.vc1_v_loop_filter8_worstcase_ssse3:      16.7 ( 5.12x)
  vc1dsp.vc1_v_loop_filter16_bestcase_c:          12.7
  vc1dsp.vc1_v_loop_filter16_bestcase_sse2:       26.4 ( 0.48x)
  vc1dsp.vc1_v_loop_filter16_bestcase_ssse3:      24.0 ( 0.53x)
  vc1dsp.vc1_v_loop_filter16_worstcase_c:        170.1
  vc1dsp.vc1_v_loop_filter16_worstcase_sse2:      25.7 ( 6.63x)
  vc1dsp.vc1_v_loop_filter16_worstcase_ssse3:     25.2 ( 6.75x)

New benchmarks:
  vc1dsp.vc1_h_loop_filter4_bestcase_c:            3.0
  vc1dsp.vc1_h_loop_filter4_bestcase_ssse3:       32.4 ( 0.09x)
  vc1dsp.vc1_h_loop_filter4_worstcase_c:          42.3
  vc1dsp.vc1_h_loop_filter4_worstcase_ssse3:      32.7 ( 1.29x)
  vc1dsp.vc1_h_loop_filter8_bestcase_c:            6.1
  vc1dsp.vc1_h_loop_filter8_bestcase_sse2:        37.1 ( 0.17x)
  vc1dsp.vc1_h_loop_filter8_bestcase_ssse3:       36.4 ( 0.17x)
  vc1dsp.vc1_h_loop_filter8_bestcase_sse4:        36.6 ( 0.17x)
  vc1dsp.vc1_h_loop_filter8_worstcase_c:          87.2
  vc1dsp.vc1_h_loop_filter8_worstcase_sse2:       36.9 ( 2.36x)
  vc1dsp.vc1_h_loop_filter8_worstcase_ssse3:      35.8 ( 2.35x)
  vc1dsp.vc1_h_loop_filter8_worstcase_sse4:       36.7 ( 2.38x)
  vc1dsp.vc1_h_loop_filter16_bestcase_c:          12.0
  vc1dsp.vc1_h_loop_filter16_bestcase_sse2:       40.0 ( 0.30x)
  vc1dsp.vc1_h_loop_filter16_bestcase_ssse3:      39.8 ( 0.30x)
  vc1dsp.vc1_h_loop_filter16_bestcase_sse4:       44.4 ( 0.27x)
  vc1dsp.vc1_h_loop_filter16_worstcase_c:        166.4
  vc1dsp.vc1_h_loop_filter16_worstcase_sse2:      39.9 ( 4.17x)
  vc1dsp.vc1_h_loop_filter16_worstcase_ssse3:     39.7 ( 4.19x)
  vc1dsp.vc1_h_loop_filter16_worstcase_sse4:      43.8 ( 3.80x)
  vc1dsp.vc1_v_loop_filter4_bestcase_c:            3.6
  vc1dsp.vc1_v_loop_filter4_bestcase_ssse3:       16.3 ( 0.22x)
  vc1dsp.vc1_v_loop_filter4_worstcase_c:          49.3
  vc1dsp.vc1_v_loop_filter4_worstcase_ssse3:      16.2 ( 3.04x)
  vc1dsp.vc1_v_loop_filter8_bestcase_c:            6.4
  vc1dsp.vc1_v_loop_filter8_bestcase_sse2:        16.3 ( 0.39x)
  vc1dsp.vc1_v_loop_filter8_bestcase_ssse3:       15.8 ( 0.40x)
  vc1dsp.vc1_v_loop_filter8_worstcase_c:          85.7
  vc1dsp.vc1_v_loop_filter8_worstcase_sse2:       16.3 ( 5.24x)
  vc1dsp.vc1_v_loop_filter8_worstcase_ssse3:      15.8 ( 5.42x)
  vc1dsp.vc1_v_loop_filter16_bestcase_c:          12.7
  vc1dsp.vc1_v_loop_filter16_bestcase_sse2:       24.7 ( 0.52x)
  vc1dsp.vc1_v_loop_filter16_bestcase_ssse3:      22.7 ( 0.56x)
  vc1dsp.vc1_v_loop_filter16_worstcase_c:        169.4
  vc1dsp.vc1_v_loop_filter16_worstcase_sse2:      24.1 ( 7.03x)
  vc1dsp.vc1_v_loop_filter16_worstcase_ssse3:     24.6 ( 6.88x)

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2026-08-01 16:50:06 +02:00
2025-08-08 21:51:15 +00:00
2026-07-28 17:54:07 +02:00
2025-06-23 14:48:40 +02:00
2025-05-07 15:35:47 +02:00
2026-06-23 17:15:02 +02:00
2025-08-14 08:42:29 -04:00

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 means to alter decoded audio and video through a directed graph of connected 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.
  • 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.

Languages
C 88.9%
Assembly 8.4%
Makefile 1.4%
GLSL 0.4%
C++ 0.3%
Other 0.4%