Shreesh Adiga
5085432f8b
avutil/crc: add aarch64 NEON PMULL+EOR3 SIMD implementation for av_crc
...
Implemented clmul algorithm for aarch64 using PMULL and EOR3 instructions.
The logic and structure is same as x86 clmul implementation with
slight rearrangement of constants as per PMULL and PMULL2 instructions.
Benchmarking in Android (Termux) on a MediaTek Dimensity 9400 SoC:
./tests/checkasm/checkasm --test=crc --bench --runs=12
benchmarking with native FFmpeg timers
nop: 0.2
checkasm: SVE 128 bits, using random seed 2502847808
checkasm: bench runs 4096 (1 << 12)
CRC:
- crc.crc [OK]
PMULL:
- crc.crc [OK]
checkasm: all 10 tests passed
crc_8_ATM_c: 26.0 ( 1.00x)
crc_8_ATM_pmull_eor3: 0.7 (37.17x)
crc_8_EBU_c: 46.4 ( 1.00x)
crc_8_EBU_pmull_eor3: 1.5 (31.47x)
crc_16_ANSI_c: 36.3 ( 1.00x)
crc_16_ANSI_pmull_eor3: 1.1 (31.70x)
crc_16_ANSI_LE_c: 90.9 ( 1.00x)
crc_16_ANSI_LE_pmull_eor3: 2.8 (32.30x)
crc_16_CCITT_c: 118.0 ( 1.00x)
crc_16_CCITT_pmull_eor3: 3.7 (32.00x)
crc_24_IEEE_c: 1.6 ( 1.00x)
crc_24_IEEE_pmull_eor3: 0.1 (12.19x)
crc_32_IEEE_c: 45.2 ( 1.00x)
crc_32_IEEE_pmull_eor3: 1.4 (31.39x)
crc_32_IEEE_LE_c: 49.1 ( 1.00x)
crc_32_IEEE_LE_crc: 2.5 (19.51x)
crc_32_IEEE_LE_pmull_eor3: 1.5 (32.84x)
crc_custom_polynomial_c: 45.3 ( 1.00x)
crc_custom_polynomial_pmull_eor3: 1.3 (35.16x)
2026-03-11 14:03:36 +00:00
Zhao Zhili
66f7e9db71
avutil/crc: use arm64 crc32 instruction
...
On rpi5 A76
crc_32_ieee_le_c: 23146.3 ( 1.00x)
crc_32_ieee_le_crc: 1060.1 (21.83x)
On RK3566 A55
crc_32_ieee_le_c: 28773.8 ( 1.00x)
crc_32_ieee_le_crc: 2602.4 (11.06x)
Co-authored-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com >
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com >
2026-01-04 15:49:30 +01:00
Andreas Rheinhardt
dc03cffe9c
avutil/crc: Use x86 clmul for CRC when available
...
Observed near 10x speedup on AMD Zen4 7950x:
av_crc_c: 22057.0 ( 1.00x)
av_crc_clmul: 2202.8 (10.01x)
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com >
2026-01-04 15:49:30 +01:00
Andreas Rheinhardt
52190efade
avutil/crc: Don't assert AVCRCId to be valid
...
This function is supposed to return NULL on failure.
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com >
2026-01-04 15:49:30 +01:00
Andreas Rheinhardt
636631d9db
Remove unnecessary libavutil/(avutil|common|internal).h inclusions
...
Some of these were made possible by moving several common macros to
libavutil/macros.h.
While just at it, also improve the other headers a bit.
Reviewed-by: Martin Storsjö <martin@martin.st >
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com >
2022-02-24 12:56:49 +01:00
Aurelien Jacobs
0b4ad86959
crc: add AV_CRC_8_SBC as a 8 bits CRC with polynomial 0x1D
2018-03-07 22:26:53 +01:00
Muhammad Faiz
8329ae781a
avutil/crc: use ff_thread_once at av_crc_get_table
...
Fix tsan warnings.
Signed-off-by: Muhammad Faiz <mfcc64@gmail.com >
2017-11-14 06:25:05 +07:00
Derek Buitenhuis
96d616052b
Merge commit 'd12b5b2f135aade4099f4b26b0fe678656158c13'
...
* commit 'd12b5b2f135aade4099f4b26b0fe678656158c13':
build: Split test programs off into separate files
Some conversions done by: James Almer <jamrial@gmail.com >
Merged-by: Derek Buitenhuis <derek.buitenhuis@gmail.com >
2016-05-11 19:13:03 +01:00
Derek Buitenhuis
5f587b1daf
Merge commit '3b08d9d932eef09403074d5af31e10d8011e840b'
...
* commit '3b08d9d932eef09403074d5af31e10d8011e840b':
testprogs: K&R formatting cosmetics
Merged-by: Derek Buitenhuis <derek.buitenhuis@gmail.com >
2016-04-21 16:50:06 +01:00
Diego Biurrun
d12b5b2f13
build: Split test programs off into separate files
...
This avoids spurious library rebuilds when only the test program
code is changed and simplifies the build system.
2016-04-07 16:14:42 +02:00
Diego Biurrun
3b08d9d932
testprogs: K&R formatting cosmetics
2016-03-24 21:45:07 +01:00
Michael Niedermayer
d6f6e98eb1
avutil/crc: use EINVAL instead of -1 for the return code of av_crc_init()
...
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc >
2015-10-16 03:24:36 +02:00
Michael Niedermayer
d1dce1c517
avutil/crc: Fix type of p table so its content fits without overflwoing
...
Signed-off-by: Michael Niedermayer <michaelni@gmx.at >
2015-06-19 02:25:48 +02:00
Michael Niedermayer
a8d01a7378
Merge commit '0983d48111f578e17e8c1967d25ce593fce62b63'
...
* commit '0983d48111f578e17e8c1967d25ce593fce62b63':
crc: add ANSI CRC16 LE
Conflicts:
doc/APIchanges
libavutil/crc.c
libavutil/crc.h
libavutil/version.h
tests/ref/fate/crc
Merged-by: Michael Niedermayer <michaelni@gmx.at >
2014-04-17 22:38:51 +02:00
Alessandro Ghedini
0983d48111
crc: add ANSI CRC16 LE
...
This adds the reversed byte-order version of the ANSI CRC16.
Signed-off-by: Anton Khirnov <anton@khirnov.net >
2014-04-17 20:08:19 +02:00
Paul B Mahol
410192e369
add crc24 tables
...
Signed-off-by: Paul B Mahol <onemda@gmail.com >
2013-07-10 12:07:53 +00:00
James Almer
c485c835fe
avutil/crc: Dont limit CRC32 standard tables
...
Currently, standard tables like AV_CRC_32_IEEE and such are being generated (or
provided in case the user compiles with hardcoded tables) with only 257 elements.
We're missing a considerable boost in performance by not making them with a size
of 1024 elements instead.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at >
2013-06-01 10:53:39 +02:00
Michael Niedermayer
e2b703f536
Merge commit '62a43d30cc3b9b2460f2c926beb522df32493625'
...
* commit '62a43d30cc3b9b2460f2c926beb522df32493625':
crc: Move static data table from header to .c file
avcodec/rectangle: Remove nonsense assert
Conflicts:
libavcodec/rectangle.h
libavutil/crc_data.h
The assert is not removed as the assert ensures clear and easy
to debug failures instead of undefined behavior in case of
misalignment.
Merged-by: Michael Niedermayer <michaelni@gmx.at >
2013-02-12 13:11:14 +01:00
Diego Biurrun
62a43d30cc
crc: Move static data table from header to .c file
...
Having static data tables in header files is a potential source of trouble.
2013-02-11 16:48:44 +01:00
Michael Niedermayer
99efd59626
Merge commit 'cb45553f577f8e0ebfe05d3287e1b6fa5859b967'
...
* commit 'cb45553f577f8e0ebfe05d3287e1b6fa5859b967':
Remove pointless #undefs of previously forbidden functions.
fate: Add dependencies for bmp, cdxl, dfa, mp3
Conflicts:
doc/examples/muxing.c
libavfilter/filtfmts.c
libavutil/des.c
libavutil/eval.c
libavutil/log.c
libavutil/parseutils.c
tests/fate/mp3.mak
Merged-by: Michael Niedermayer <michaelni@gmx.at >
2012-12-05 13:34:45 +01:00
Anton Khirnov
cb45553f57
Remove pointless #undefs of previously forbidden functions.
2012-12-04 21:40:22 +01:00
Michael Niedermayer
37e81996dc
Merge commit '9221efef7968463f3e3d9ce79ea72eaca082e73f'
...
* commit '9221efef7968463f3e3d9ce79ea72eaca082e73f':
lavf: fix av_interleaved_write_frame() doxy.
lavf: clarify the lifetime of demuxed packets.
avconv: do not free muxed packet on streamcopy.
crc: move doxy to the header
vf_drawtext: do not use deprecated av_tree_node_size
x86: Refactor PSWAPD fallback implementations and port to cpuflags
Merged-by: Michael Niedermayer <michaelni@gmx.at >
2012-11-03 14:24:11 +01:00
Anton Khirnov
b4dc6dccba
crc: move doxy to the header
2012-11-02 18:28:56 +01:00
Michael Niedermayer
707138593a
Merge remote-tracking branch 'qatar/master'
...
* qatar/master:
adpcmenc: cosmetics: pretty-printing
ac3dec: cosmetics: pretty-printing
yuv4mpeg: cosmetics: pretty-printing
shorten: remove dead initialization
roqvideodec: set AVFrame reference before reget_buffer.
bmp: fix some 1bit samples.
latmdec: add fate test for audio config change
oma: PCM support
oma: better format detection with small probe buffer
oma: clearify ambiguous if condition
wavpack: Properly clip samples during lossy decode
Code clean-up for crc.c, lfg.c, log.c, random_see.d, rational.c and tree.c.
Cleaned pixdesc.c file in libavutil
zmbv.c: coding style clean-up.
xan.c: coding style clean-up.
mpegvideo.c: code cleanup - first 500 lines.
Conflicts:
Changelog
libavcodec/adpcmenc.c
libavcodec/bmp.c
libavcodec/zmbv.c
libavutil/log.c
libavutil/pixdesc.c
Merged-by: Michael Niedermayer <michaelni@gmx.at >
2011-12-05 00:11:57 +01:00
Yordan Makariev
425b45d4b0
Code clean-up for crc.c, lfg.c, log.c, random_see.d, rational.c and tree.c.
...
Signed-off-by: Ronald S. Bultje <rsbultje@gmail.com >
2011-12-03 15:13:48 -08:00
Michael Niedermayer
0a23067ab4
Merge remote-tracking branch 'qatar/master'
...
* qatar/master:
mpeg4dec: use unsigned type for startcode in ff_mpeg4_decode_picture_header
mpeg124: use sign_extend() function
ac3dec: use get_sbits() instead of manually sign-extending
4xm: fix signed overflow
wmavoice: fix a signed overflow
mpegvideo_enc: fix a signed overflow
crc: fix signed overflow
fate: run avconv with -nostats flag
avtools: add -v as alias for -loglevel
avconv: always print stats with AV_LOG_INFO
doc/avconv: add forgotten output/per-stream info to -filter
avconv: add -stats option to enable/disable printing encoding progress
avconv: in output_packet() don't set decoded_data_size for video.
avconv: remove pointless always true condition
avconv: factorize common code in transcode_init()
zmbv: remove memcpy() of decoded frame
mpeg12enc: use sign_extend() function
h264pred: use unsigned types for pixel values, fix signed overflows
h264: fix signed overflows in x*0x01010101 expressions
h264pred: remove unused variables
Conflicts:
avconv.c
tests/fate-run.sh
Merged-by: Michael Niedermayer <michaelni@gmx.at >
2011-10-10 03:50:58 +02:00
Mans Rullgard
8b19ae0761
crc: fix signed overflow
...
This fixes a signed overflow from i << 24 when i == 255 by
making i unsigned. The result of the shift is already
assigned to an variable of unsigned type.
Signed-off-by: Mans Rullgard <mans@mansr.com >
2011-10-09 16:53:31 +01:00
Mans Rullgard
2912e87a6c
Replace FFmpeg with Libav in licence headers
...
Signed-off-by: Mans Rullgard <mans@mansr.com >
2011-03-19 13:33:20 +00:00
Måns Rullgård
8fc0162ac4
Add av_ prefix to bswap macros
...
Originally committed as revision 24170 to svn://svn.ffmpeg.org/ffmpeg/trunk
2010-07-10 22:12:30 +00:00
Måns Rullgård
e6b22522c9
bswap: change ME to NE in macro names
...
Other parts of FFmpeg use NE (native endian) rather than ME (machine).
This makes it consistent.
Originally committed as revision 24169 to svn://svn.ffmpeg.org/ffmpeg/trunk
2010-07-10 22:09:01 +00:00
Diego Biurrun
e669590a0a
Fix parameter name and position in av_crc_init Doxygen documentation.
...
Originally committed as revision 23981 to svn://svn.ffmpeg.org/ffmpeg/trunk
2010-07-02 11:49:17 +00:00
Måns Rullgård
49bd8e4b84
Fix grammar errors in documentation
...
Originally committed as revision 23904 to svn://svn.ffmpeg.org/ffmpeg/trunk
2010-06-30 15:38:06 +00:00
Måns Rullgård
2ed6f39944
Replace many includes of libavutil/common.h with what is actually needed
...
This reduces the number of false dependencies on header files and
speeds up compilation.
Originally committed as revision 22407 to svn://svn.ffmpeg.org/ffmpeg/trunk
2010-03-09 17:39:19 +00:00
Jeff Downs
d468ff0fdf
Fix cast of byte buffer to uint32 that was disregarding alignment
...
requirements.
Now calculates crc byte at a time until aligned, then continues with uint32
optimized calculation.
This fixes crashes during mlp decoding on sparc (at least, maybe others).
Originally committed as revision 19160 to svn://svn.ffmpeg.org/ffmpeg/trunk
2009-06-12 02:13:12 +00:00
Diego Biurrun
7d685b486b
spelling/grammar/consistency review part III
...
Originally committed as revision 16849 to svn://svn.ffmpeg.org/ffmpeg/trunk
2009-01-28 23:16:49 +00:00
Diego Biurrun
89c9ff504b
spelling/grammar/consistency review part I
...
Originally committed as revision 16840 to svn://svn.ffmpeg.org/ffmpeg/trunk
2009-01-28 00:16:05 +00:00
Aurelien Jacobs
b250f9c66d
Change semantic of CONFIG_*, HAVE_* and ARCH_*.
...
They are now always defined to either 0 or 1.
Originally committed as revision 16590 to svn://svn.ffmpeg.org/ffmpeg/trunk
2009-01-13 23:44:16 +00:00
Diego Biurrun
e503674c4a
Add necessary, remove unnecessary #includes.
...
Originally committed as revision 16547 to svn://svn.ffmpeg.org/ffmpeg/trunk
2009-01-11 21:03:42 +00:00
Aurelien Jacobs
37d3e0667a
uses FF_ARRAY_ELEMS() where appropriate
...
Originally committed as revision 15662 to svn://svn.ffmpeg.org/ffmpeg/trunk
2008-10-21 21:40:24 +00:00
Michael Niedermayer
070144671d
Dont cast const away.
...
Originally committed as revision 11700 to svn://svn.ffmpeg.org/ffmpeg/trunk
2008-02-01 01:33:16 +00:00
Diego Biurrun
f3635240b7
Fix a couple of 'return type defaults to int' and 'control reaches end of
...
non-void function' warnings in test code.
Originally committed as revision 11491 to svn://svn.ffmpeg.org/ffmpeg/trunk
2008-01-10 10:35:37 +00:00
Aurelien Jacobs
03d83abcc6
Fix access to the last element of the table.
...
(size of the table vs. number of elements in the table)
Originally committed as revision 11448 to svn://svn.ffmpeg.org/ffmpeg/trunk
2008-01-07 13:19:38 +00:00
Aurelien Jacobs
3abe5fbdc4
improve CRC API
...
- don't export any global var
- provide either generated or hardcoded tables
Originally committed as revision 11409 to svn://svn.ffmpeg.org/ffmpeg/trunk
2008-01-04 23:09:58 +00:00
Diego Biurrun
f8a80fd69d
main() --> main(void)
...
Originally committed as revision 11079 to svn://svn.ffmpeg.org/ffmpeg/trunk
2007-11-23 00:52:56 +00:00
Reimar Döffinger
45e3c163a9
Additional documentation for CRC functions
...
Originally committed as revision 10151 to svn://svn.ffmpeg.org/ffmpeg/trunk
2007-08-20 16:54:47 +00:00
Reimar Döffinger
7b07d3e8fe
Use defines instead of raw hex numbers to specify CRC polynomials
...
Originally committed as revision 10143 to svn://svn.ffmpeg.org/ffmpeg/trunk
2007-08-19 12:36:15 +00:00
Michael Niedermayer
08cb195020
kill 3 more av_mallocz_static()
...
Originally committed as revision 8397 to svn://svn.ffmpeg.org/ffmpeg/trunk
2007-03-14 01:59:53 +00:00
Diego Biurrun
b78e7197a8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
...
and fix GPL/LGPL version mismatches.
Originally committed as revision 6577 to svn://svn.ffmpeg.org/ffmpeg/trunk
2006-10-07 15:30:46 +00:00
Diego Biurrun
04d7f60143
Add official LGPL license headers to the files that were missing them.
...
Originally committed as revision 6219 to svn://svn.ffmpeg.org/ffmpeg/trunk
2006-09-10 14:02:42 +00:00
Michael Niedermayer
a08d38ee82
put the code which is specific for the large crc table under #ifndef CONFIG_SMALL
...
Originally committed as revision 5676 to svn://svn.ffmpeg.org/ffmpeg/trunk
2006-07-08 20:23:19 +00:00