Commit Graph

54 Commits

Author SHA1 Message Date
Ganesh Ajjanagadde
971d12b7f9 avutil/mathematics: speed up av_gcd by using Stein's binary GCD algorithm
This uses Stein's binary GCD algorithm:
https://en.wikipedia.org/wiki/Binary_GCD_algorithm
to get a roughly 4x speedup over Euclidean GCD on standard architectures
with a compiler intrinsic for ctzll, and a roughly 2x speedup otherwise.
At the moment, the compiler intrinsic is used on GCC and Clang due to
its easy availability.

Quick note regarding overflow: yes, subtractions on int64_t can, but the
llabs takes care of that. The llabs is also guaranteed to be safe, with
no annoying INT64_MIN business since INT64_MIN being a power of 2, is
shifted down before being sent to llabs.

The binary GCD needs ff_ctzll, an extension of ff_ctz for long long (int64_t). On
GCC, this is provided by a built-in. On Microsoft, there is a
BitScanForward64 analog of BitScanForward that should work; but I can't confirm.
Apparently it is not available on 32 bit builds; so this may or may not
work correctly. On Intel, per the documentation there is only an
intrinsic for _bit_scan_forward and people have posted on forums
regarding _bit_scan_forward64, but often their documentation is
woeful. Again, I don't have it, so I can't test.

As such, to be safe, for now only the GCC/Clang intrinsic is added, the rest
use a compiled version based on the De-Bruijn method of Leiserson et al:
http://supertech.csail.mit.edu/papers/debruijn.pdf.

Tested with FATE, sample benchmark (x86-64, GCC 5.2.0, Haswell)
with a START_TIMER and STOP_TIMER in libavutil/rationsl.c, followed by a
make fate.

aac-am00_88.err:
builtin:
714 decicycles in av_gcd,    4095 runs,      1 skips

de-bruijn:
1440 decicycles in av_gcd,    4096 runs,      0 skips

previous:
2889 decicycles in av_gcd,    4096 runs,      0 skips

Signed-off-by: Ganesh Ajjanagadde <gajjanagadde@gmail.com>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2015-10-11 04:08:41 +02:00
Hendrik Leppkes
d96d0252fd Merge commit 'cdfe45ad371b7a8e6135b6c063b6b2a93152cb3a'
* commit 'cdfe45ad371b7a8e6135b6c063b6b2a93152cb3a':
  lavu: Drop deprecated av_reverse function

Merged-by: Hendrik Leppkes <h.leppkes@gmail.com>
2015-09-05 17:17:15 +02:00
Vittorio Giovara
cdfe45ad37 lavu: Drop deprecated av_reverse function
Deprecated in 10/2012.
2015-08-28 16:04:27 +02:00
Michael Niedermayer
666e29fe9e avutil/mathematics/av_add_stable: Avoid av_cmp_q() call
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2014-06-02 19:06:39 +02:00
Michael Niedermayer
e9add0d85b av_add_stable: Add fast special case where step can be represented exactly
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2014-06-02 19:00:18 +02:00
Michael Niedermayer
4956d0e5a6 avutil/mathematics/av_add_stable: check for the common case of inc=1
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2014-06-02 18:02:27 +02:00
Michael Niedermayer
5b7519fbaa avutil/mathematics/av_add_stable: avoid unneeded variable
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2014-06-02 18:00:34 +02:00
Michael Niedermayer
bc4b424dfa Merge commit 'de69aedf9935631b7f78e8b8da6e460422a9bc5f'
* commit 'de69aedf9935631b7f78e8b8da6e460422a9bc5f':
  mathematics: K&R formatting cosmetics

Conflicts:
	libavutil/mathematics.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2014-05-03 23:46:36 +02:00
Luca Barbato
de69aedf99 mathematics: K&R formatting cosmetics 2014-05-03 18:31:18 +02:00
Michael Niedermayer
b317f9459f avutil/mathematics: add av_add_stable()
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2014-01-04 15:10:09 +01:00
Michael Niedermayer
3929c17405 Merge commit '94a417acc05cc5151b473abc0bf51fad26f8c5a0'
* commit '94a417acc05cc5151b473abc0bf51fad26f8c5a0':
  mathematics: remove asserts from av_rescale_rnd()

Conflicts:
	libavutil/mathematics.c

The asserts are left in place for now as no code checks the return
value, but we sure can change this if application developers
prefer

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2014-01-04 01:27:59 +01:00
Anton Khirnov
94a417acc0 mathematics: remove asserts from av_rescale_rnd()
It is a public function, it must not assert on its parameters.
2014-01-03 16:39:30 +01:00
Michael Niedermayer
740e740895 av_rescale: support passing MIN/MAX through
Reviewed-by: Clément Bœsch <ubitux@gmail.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2013-01-03 00:02:22 +01:00
Michael Niedermayer
8766ad9eb1 lavu: add av_rescale_delta()
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2012-10-27 00:26:35 +02:00
Michael Niedermayer
90d4b07063 mathemathics: update copyright years
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2012-10-27 00:26:35 +02:00
Michael Niedermayer
d6c342fdc0 Merge commit 'd5c62122a7b26704bf867a1262df358623bf5edf'
* commit 'd5c62122a7b26704bf867a1262df358623bf5edf':
  Move av_reverse table to libavcodec

Conflicts:
	libavcodec/asvenc.c
	libavcodec/vble.c
	libavutil/common.h
	libavutil/mathematics.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2012-10-13 14:35:42 +02:00
Michael Niedermayer
d197bd4f5e Merge commit '930c9d4373e0f3cb7c64fcfc129127a309f6d066'
* commit '930c9d4373e0f3cb7c64fcfc129127a309f6d066':
  avutil: Duplicate ff_log2_tab instead of sharing it across libs

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2012-10-13 14:24:58 +02:00
Diego Biurrun
d5c62122a7 Move av_reverse table to libavcodec
It is only used in that library.
2012-10-12 20:39:18 +02:00
Diego Biurrun
930c9d4373 avutil: Duplicate ff_log2_tab instead of sharing it across libs
The table is so small that the space gain is not worth the
performance overhead of cross-library access.
2012-10-12 20:39:17 +02:00
Michael Niedermayer
e335658370 Merge commit '9734b8ba56d05e970c353dfd5baafa43fdb08024'
* commit '9734b8ba56d05e970c353dfd5baafa43fdb08024':
  Move avutil tables only used in libavcodec to libavcodec.

Conflicts:
	libavcodec/mathtables.c
	libavutil/intmath.h

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2012-10-12 14:26:46 +02:00
Diego Biurrun
9734b8ba56 Move avutil tables only used in libavcodec to libavcodec. 2012-10-11 18:29:36 +02:00
Michael Niedermayer
2f23a8ab17 libavutil/mathematics: use av_assert()
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2012-06-06 20:00:35 +02:00
Michael Niedermayer
eadd4264ee Merge remote-tracking branch 'qatar/master'
* qatar/master: (36 commits)
  adpcmenc: Use correct frame_size for Yamaha ADPCM.
  avcodec: add ff_samples_to_time_base() convenience function to internal.h
  adx parser: set duration
  mlp parser: set duration instead of frame_size
  gsm parser: set duration
  mpegaudio parser: set duration instead of frame_size
  (e)ac3 parser: set duration instead of frame_size
  flac parser: set duration instead of frame_size
  avcodec: add duration field to AVCodecParserContext
  avutil: add av_rescale_q_rnd() to allow different rounding
  pnmdec: remove useless .pix_fmts
  libmp3lame: support float and s32 sample formats
  libmp3lame: renaming, rearrangement, alignment, and comments
  libmp3lame: use the LAME default bit rate
  libmp3lame: use avpriv_mpegaudio_decode_header() for output frame parsing
  libmp3lame: cosmetics: remove some pointless comments
  libmp3lame: convert some debugging code to av_dlog()
  libmp3lame: remove outdated comment.
  libmp3lame: do not set coded_frame->key_frame.
  libmp3lame: improve error handling in MP3lame_encode_init()
  ...

Conflicts:
	doc/APIchanges
	libavcodec/libmp3lame.c
	libavcodec/pcxenc.c
	libavcodec/pnmdec.c
	libavcodec/pnmenc.c
	libavcodec/sgienc.c
	libavcodec/utils.c
	libavformat/hls.c
	libavutil/avutil.h
	libswscale/x86/swscale_mmx.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2012-02-21 05:10:12 +01:00
Justin Ruggles
0b42a9388c avutil: add av_rescale_q_rnd() to allow different rounding 2012-02-20 15:08:40 -05:00
Michael Niedermayer
bb9d5171a7 Merge remote-tracking branch 'qatar/master'
* qatar/master: (21 commits)
  swscale: Add Doxygen for hyscale_fast/hScale.
  fate: enable lavfi-pixmt tests on big endian systems
  PPC: swscale: disable altivec functions for unsupported formats
  fate: merge identical pixdesc_be/le tests
  swscale: Add Doxygen for yuv2planar*/yuv2packed* functions.
  build: call texi2pod.pl with full path instead of symlink
  build: include sub-makefiles using full path instead of symlinks
  swscale: update big endian reference values after dff5a835.
  wavpack: skip blocks with no samples
  cosmetics: remove outdated comment that is no longer true
  build: replace some addprefix/addsuffix with substitution refs
  avutil: Remove unused arbitrary precision integer code.
  configure: Drop check for availability of ten assembler operands.
  aacenc: Save channel configuration for later use.
  aacenc: Fix codebook trellising for zeroed bands.
  swscale: change prototypes of scaled YUV output functions.
  swscale: re-add support for non-native endianness.
  swscale: disentangle yuv2rgbX_c_full() into small functions.
  swscale: split yuv2packed[12X]_c() remainders into small functions.
  swscale: split yuv2packedX_altivec in smaller functions.
  ...

Conflicts:
	Makefile
	configure
	libavcodec/x86/dsputil_mmx.c
	libavfilter/Makefile
	libavformat/Makefile
	libavutil/integer.c
	libavutil/integer.h
	libswscale/swscale.c
	libswscale/swscale_internal.h
	libswscale/x86/swscale_template.c
	tests/ref/lavfi/pixdesc_le
	tests/ref/lavfi/pixfmts_scale

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2011-06-29 05:23:12 +02:00
Diego Biurrun
bb00b15f9e avutil: Remove unused arbitrary precision integer code. 2011-06-28 13:14:46 +02:00
Michael Niedermayer
a18eff49c0 av_compare_ts: Improve speed when calculations fit in 64bit.
about 110 cpu cycles before 60 cpu cycles afterwards.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2011-05-11 20:41:19 +02: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
Eli Friedman
b7cdddcd1f Silence "comparison of unsigned expression >= 0 is always true" warning.
Patch by Eli Friedman, eli d friedman a gmail

Originally committed as revision 24022 to svn://svn.ffmpeg.org/ffmpeg/trunk
2010-07-03 17:06:12 +00:00
Michael Niedermayer
65db0587a8 Add av_compare_mod()
Originally committed as revision 23551 to svn://svn.ffmpeg.org/ffmpeg/trunk
2010-06-09 17:27:42 +00:00
Diego Biurrun
ba87f0801d Remove explicit filename from Doxygen @file commands.
Passing an explicit filename to this command is only necessary if the
documentation in the @file block refers to a file different from the
one the block resides in.

Originally committed as revision 22921 to svn://svn.ffmpeg.org/ffmpeg/trunk
2010-04-20 14:45:34 +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
Michael Niedermayer
78b0182375 av_compare_ts()
Originally committed as revision 21671 to svn://svn.ffmpeg.org/ffmpeg/trunk
2010-02-07 16:26:50 +00:00
Francesco Lavra
91cc5d3767 Move ff_reverse in libavcodec to av_reverse in libavutil.
Patch by Francesco Lavra, francescolavra interfree it

Originally committed as revision 20484 to svn://svn.ffmpeg.org/ffmpeg/trunk
2009-11-09 09:11:35 +00:00
Diego Biurrun
082dea8e40 Remove all remaining code that was disabled through the major version bump.
Originally committed as revision 17903 to svn://svn.ffmpeg.org/ffmpeg/trunk
2009-03-09 10:24:47 +00:00
Diego Biurrun
bad5537e2c Use full internal pathname in doxygen @file directives.
Otherwise doxygen complains about ambiguous filenames when files exist
under the same name in different subdirectories.

Originally committed as revision 16912 to svn://svn.ffmpeg.org/ffmpeg/trunk
2009-02-01 02:00:19 +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
eded5c4309 add a ff_gcd() function again, for compatibility with old libavcodec
Originally committed as revision 16814 to svn://svn.ffmpeg.org/ffmpeg/trunk
2009-01-27 00:46:18 +00:00
Diego Biurrun
dfcb6b56f9 Directly #include a bunch of indirectly #included headers.
Originally committed as revision 16748 to svn://svn.ffmpeg.org/ffmpeg/trunk
2009-01-24 14:55:30 +00:00
Aurelien Jacobs
9ce6c13879 export gcd function as av_gcd()
Originally committed as revision 16653 to svn://svn.ffmpeg.org/ffmpeg/trunk
2009-01-17 11:13:33 +00:00
Michael Niedermayer
c448a09624 Faster ff_sqrt()
Originally committed as revision 11586 to svn://svn.ffmpeg.org/ffmpeg/trunk
2008-01-21 13:33:18 +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
Diego Biurrun
f0cb505aeb Allow compilation of test programs when TEST is defined.
Originally committed as revision 11473 to svn://svn.ffmpeg.org/ffmpeg/trunk
2008-01-08 22:54:49 +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
Steve L'Homme
949b1a13bf Replace most of the %lld and %llx by their (cleaner) PRI*64 counterparts.
patch by Steve Lhomme, slhomme divxcorp com

Originally committed as revision 6868 to svn://svn.ffmpeg.org/ffmpeg/trunk
2006-11-01 22:39:58 +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
Michael Niedermayer
fc861443d3 improve selftest
Originally committed as revision 5424 to svn://svn.ffmpeg.org/ffmpeg/trunk
2006-05-29 19:44:17 +00:00
Michael Niedermayer
2bda41e5b2 extend range used for testing (larger range should work too but testing code overflows)
Originally committed as revision 5334 to svn://svn.ffmpeg.org/ffmpeg/trunk
2006-04-29 16:02:28 +00:00
Michael Niedermayer
5c1cb3792d <= vs. >= 10l bug
Originally committed as revision 5333 to svn://svn.ffmpeg.org/ffmpeg/trunk
2006-04-29 15:38:20 +00:00
Måns Rullgård
d1c9b76287 add newline at end of file
Originally committed as revision 5330 to svn://svn.ffmpeg.org/ffmpeg/trunk
2006-04-28 19:45:16 +00:00