aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Kostylev <michael.kostylev@gmail.com>2007-12-27 01:53:02 +0000
committerDiego Biurrun <diego@biurrun.de>2007-12-27 01:53:02 +0000
commita33cab3a9a48cbbb495d2548143751f1dee67213 (patch)
tree49a8d94893e22f04f0eee8ba84baf7ae3e564f33
parent52d086084ede74aff217d5854e83bbd3ce863bb5 (diff)
downloadffmpeg-a33cab3a9a48cbbb495d2548143751f1dee67213.tar.gz
Check for the presence of llrint(), lrint(), round() and roundf()
and provide simple replacements if they are unavailable. patch by Michael Kostylev, mik niipt ru Originally committed as revision 11326 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rwxr-xr-xconfigure12
-rw-r--r--libavutil/internal.h28
2 files changed, 37 insertions, 3 deletions
diff --git a/configure b/configure
index 146eb6ca57..c95d900553 100755
--- a/configure
+++ b/configure
@@ -706,6 +706,8 @@ HAVE_LIST="
getrusage
imlib2
inet_aton
+ llrint
+ lrint
lrintf
machine_ioctl_bt848_h
machine_ioctl_meteor_h
@@ -714,6 +716,8 @@ HAVE_LIST="
mkstemp
mlib
ppc64
+ round
+ roundf
sdl
sdl_video_size
soundcard_h
@@ -1593,12 +1597,14 @@ done
check_lib math.h sin -lm
-# test for lrintf in math.h
-check_exec <<EOF && enable lrintf || disable lrintf
+# test for C99 functions in math.h
+for func in llrint lrint lrintf round roundf; do
+ check_exec <<EOF && enable $func || disable $func
#define _ISOC9X_SOURCE 1
#include <math.h>
-int main(void) { return (lrintf(3.999f) > 0)?0:1; }
+int main(void) { return ($func(3.999f) > 0)?0:1; }
EOF
+done
enabled_any libamr_nb libamr_wb && enable libamr
diff --git a/libavutil/internal.h b/libavutil/internal.h
index 93f8a02500..cbb8236071 100644
--- a/libavutil/internal.h
+++ b/libavutil/internal.h
@@ -270,6 +270,20 @@ if((y)<(x)){\
}\
}
+#ifndef HAVE_LLRINT
+static av_always_inline long long llrint(double x)
+{
+ return rint(x);
+}
+#endif /* HAVE_LLRINT */
+
+#ifndef HAVE_LRINT
+static av_always_inline long int lrint(double x)
+{
+ return rint(x);
+}
+#endif /* HAVE_LRINT */
+
#ifndef HAVE_LRINTF
static av_always_inline long int lrintf(float x)
{
@@ -277,4 +291,18 @@ static av_always_inline long int lrintf(float x)
}
#endif /* HAVE_LRINTF */
+#ifndef HAVE_ROUND
+static av_always_inline double round(double x)
+{
+ return (x > 0) ? floor(x + 0.5) : ceil(x - 0.5);
+}
+#endif /* HAVE_ROUND */
+
+#ifndef HAVE_ROUNDF
+static av_always_inline float roundf(float x)
+{
+ return (x > 0) ? floor(x + 0.5) : ceil(x - 0.5);
+}
+#endif /* HAVE_ROUNDF */
+
#endif /* FFMPEG_INTERNAL_H */