[FFmpeg-cvslog] avfilter/vf_pullup: 2nd try to workaround gcc 4.4.3 bug on arm

Michael Niedermayer git at videolan.org
Fri Aug 1 14:23:51 CEST 2014


ffmpeg | branch: master | Michael Niedermayer <michaelni at gmx.at> | Fri Aug  1 14:06:42 2014 +0200| [9e052df86d522cddbddaafe584c2c8cf4d5f5032] | committer: Michael Niedermayer

avfilter/vf_pullup: 2nd try to workaround gcc 4.4.3 bug on arm

The first try failed to work with some build flags

The gcc version affected is very old and unmaintained AFAIK thus i made no
attempt to report this to the gcc developers.

The workaround is pushed as it may still affect users and does affect one
fate client

Signed-off-by: Michael Niedermayer <michaelni at gmx.at>

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

 libavfilter/vf_pullup.c |    6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/libavfilter/vf_pullup.c b/libavfilter/vf_pullup.c
index ac67de6..c38d0bb 100644
--- a/libavfilter/vf_pullup.c
+++ b/libavfilter/vf_pullup.c
@@ -67,7 +67,7 @@ static int query_formats(AVFilterContext *ctx)
     return 0;
 }
 
-#define ABS(a) ((a) > 0 ? (a) : -(a))
+#define ABS(a) (((a) ^ ((a) >> 31)) - ((a) >> 31))
 
 static int diff_c(const uint8_t *a, const uint8_t *b, ptrdiff_t s)
 {
@@ -389,8 +389,8 @@ static void compute_affinity(PullupContext *s, PullupField *f)
         int v  = f->vars[i];
         int lv = f->prev->vars[i];
         int rv = f->next->vars[i];
-        int lc = f->combs[i] - (v + lv) + ABS(v - lv);
-        int rc = f->next->combs[i] - (v + rv) + ABS(v - rv);
+        int lc = f->      combs[i] - 2*(v < lv ? v : lv);
+        int rc = f->next->combs[i] - 2*(v < rv ? v : rv);
 
         lc = FFMAX(lc, 0);
         rc = FFMAX(rc, 0);



More information about the ffmpeg-cvslog mailing list