summaryrefslogtreecommitdiffstats
path: root/libavcodec/mathops.h
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2012-10-12 14:26:46 +0200
committerMichael Niedermayer <michaelni@gmx.at>2012-10-12 14:26:46 +0200
commite335658370840390272b70de92f5a76860537fb9 (patch)
tree8f9074bfd2d0f5c6c09c34f23b354ee9dbce7e56 /libavcodec/mathops.h
parent43cce41267a7aa71946911e87b4dfce48183bb25 (diff)
parent9734b8ba56d05e970c353dfd5baafa43fdb08024 (diff)
downloadffmpeg-streaming-e335658370840390272b70de92f5a76860537fb9.zip
ffmpeg-streaming-e335658370840390272b70de92f5a76860537fb9.tar.gz
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>
Diffstat (limited to 'libavcodec/mathops.h')
-rw-r--r--libavcodec/mathops.h29
1 files changed, 29 insertions, 0 deletions
diff --git a/libavcodec/mathops.h b/libavcodec/mathops.h
index 2840735..7ff0551 100644
--- a/libavcodec/mathops.h
+++ b/libavcodec/mathops.h
@@ -22,9 +22,14 @@
#ifndef AVCODEC_MATHOPS_H
#define AVCODEC_MATHOPS_H
+#include <stdint.h>
+
#include "libavutil/common.h"
#include "config.h"
+extern const uint32_t ff_inverse[257];
+extern const uint8_t ff_sqrt_tab[256];
+
#if ARCH_ARM
# include "arm/mathops.h"
#elif ARCH_AVR32
@@ -185,4 +190,28 @@ if ((y) < (x)) {\
# define PACK_2S16(a,b) PACK_2U16((a)&0xffff, (b)&0xffff)
#endif
+#ifndef FASTDIV
+# define FASTDIV(a,b) ((uint32_t)((((uint64_t)a) * ff_inverse[b]) >> 32))
+#endif /* FASTDIV */
+
+static inline av_const unsigned int ff_sqrt(unsigned int a)
+{
+ unsigned int b;
+
+ if (a < 255) return (ff_sqrt_tab[a + 1] - 1) >> 4;
+ else if (a < (1 << 12)) b = ff_sqrt_tab[a >> 4] >> 2;
+#if !CONFIG_SMALL
+ else if (a < (1 << 14)) b = ff_sqrt_tab[a >> 6] >> 1;
+ else if (a < (1 << 16)) b = ff_sqrt_tab[a >> 8] ;
+#endif
+ else {
+ int s = av_log2_16bit(a >> 16) >> 1;
+ unsigned int c = a >> (s + 2);
+ b = ff_sqrt_tab[c >> (s + 8)];
+ b = FASTDIV(c,b) + (b << s);
+ }
+
+ return b - (a < b * b);
+}
+
#endif /* AVCODEC_MATHOPS_H */
OpenPOWER on IntegriCloud