[FFmpeg-cvslog] avfilter/f_metadata: avoid float rounding problems

Tobias Rapp git at videolan.org
Thu Feb 11 16:34:52 CET 2016


ffmpeg | branch: master | Tobias Rapp <t.rapp at noa-archive.com> | Thu Feb 11 13:35:19 2016 +0100| [8b99c5e8daf27c8198df4061eef0ac8b193e1b73] | committer: Paul B Mahol

avfilter/f_metadata: avoid float rounding problems

Signed-off-by: Tobias Rapp <t.rapp at noa-archive.com>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=8b99c5e8daf27c8198df4061eef0ac8b193e1b73
---

 libavfilter/f_metadata.c |    8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/libavfilter/f_metadata.c b/libavfilter/f_metadata.c
index 40ab6bb..e0ea30b 100644
--- a/libavfilter/f_metadata.c
+++ b/libavfilter/f_metadata.c
@@ -23,6 +23,8 @@
  * filter for manipulating frame metadata
  */
 
+#include <float.h>
+
 #include "libavutil/avassert.h"
 #include "libavutil/avstring.h"
 #include "libavutil/eval.h"
@@ -117,7 +119,7 @@ static int equal(MetadataContext *s, const char *value1, const char *value2, siz
     if (sscanf(value1, "%f", &f1) + sscanf(value2, "%f", &f2) != 2)
         return 0;
 
-    return f1 == f2;
+    return fabsf(f1 - f2) < FLT_EPSILON;
 }
 
 static int less(MetadataContext *s, const char *value1, const char *value2, size_t length)
@@ -127,7 +129,7 @@ static int less(MetadataContext *s, const char *value1, const char *value2, size
     if (sscanf(value1, "%f", &f1) + sscanf(value2, "%f", &f2) != 2)
         return 0;
 
-    return f1 < f2;
+    return (f1 - f2) < FLT_EPSILON;
 }
 
 static int greater(MetadataContext *s, const char *value1, const char *value2, size_t length)
@@ -137,7 +139,7 @@ static int greater(MetadataContext *s, const char *value1, const char *value2, s
     if (sscanf(value1, "%f", &f1) + sscanf(value2, "%f", &f2) != 2)
         return 0;
 
-    return f1 > f2;
+    return (f2 - f1) < FLT_EPSILON;
 }
 
 static int parse_expr(MetadataContext *s, const char *value1, const char *value2, size_t length)



More information about the ffmpeg-cvslog mailing list