]> rtime.felk.cvut.cz Git - frescor/ffmpeg.git/commitdiff
Check for the presence of llrint(), lrint(), round() and roundf()
authordiego <diego@9553f0bf-9b14-0410-a0b8-cfaf0461ba5b>
Thu, 27 Dec 2007 01:53:02 +0000 (01:53 +0000)
committerdiego <diego@9553f0bf-9b14-0410-a0b8-cfaf0461ba5b>
Thu, 27 Dec 2007 01:53:02 +0000 (01:53 +0000)
and provide simple replacements if they are unavailable.
patch by Michael Kostylev, mik niipt ru

git-svn-id: file:///var/local/repositories/ffmpeg/trunk@11326 9553f0bf-9b14-0410-a0b8-cfaf0461ba5b

configure
libavutil/internal.h

index 146eb6ca574c7cb7482c3c3ff61cb3a6973949ee..c95d900553ee637298948fe590b4f8a6df5e4ef6 100755 (executable)
--- 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
 
index 93f8a025005d30d36fb75b674e232e06b62b7826..cbb8236071f694deb71f87a3ef01449300091ef3 100644 (file)
@@ -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 */