In function func_eval_expr_int_format inside
libavfilter/vf_drawtext.c, the functions feclearexcept and
fetestexcept are used. They are missing on uclibc. On that platform,
instead of checking if the FPU raised an exception after trying to
convert a floating-point number to an integer, do the check beforehand
using isfinite and comparisons against the maximum and minimum value
of an int32_t.
Signed-off-by: René Rhéaume <[email protected]>
--- ffmpeg-2.6.3/libavfilter/vf_drawtext.c
+++ ffmpeg-2.6.3-uclibc/libavfilter/vf_drawtext.c
@@ -921,12 +921,23 @@ static int func_eval_expr_int_format(AVF
}
}
+#ifdef __UCLIBC__
+ if (isfinite(res) && (res <= 2147483647.0) && (res >= -2147483647.0)) {
+ intval = res;
+ } else {
+ av_log(ctx, AV_LOG_ERROR,
+ "Conversion of floating-point result to int failed. Conversion result: %d\n",
+ intval);
+ return AVERROR(EINVAL);
+ }
+#else
feclearexcept(FE_ALL_EXCEPT);
intval = res;
if ((ret = fetestexcept(FE_INVALID|FE_OVERFLOW|FE_UNDERFLOW))) {
av_log(ctx, AV_LOG_ERROR, "Conversion of floating-point result to int failed. Control register: 0x%08x. Conversion result: %d\n", ret, intval);
return AVERROR(EINVAL);
}
+#endif
if (argc == 3)
av_strlcatf(fmt_str, sizeof(fmt_str), "0%u", positions);
_______________________________________________
ffmpeg-devel mailing list
[email protected]
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel