| #include <stdlib.h> |
| |
| static /*__attribute__ ((noinline))*/ int Sub3(int a, int b, int c) { |
| const int pb = b - c; |
| const int pa = a - c; |
| return abs(pb) - abs(pa); |
| } |
| |
| static unsigned Select(unsigned a, unsigned b, unsigned c) { |
| const int pa_minus_pb = |
| Sub3((a >> 24) & 0xff, (b >> 24) & 0xff, (c >> 24) & 0xff) + |
| Sub3((a >> 16) & 0xff, (b >> 16) & 0xff, (c >> 16) & 0xff) + |
| Sub3((a >> 8) & 0xff, (b >> 8) & 0xff, (c >> 8) & 0xff) + |
| Sub3((a >> 0) & 0xff, (b >> 0) & 0xff, (c >> 0) & 0xff); |
| return (pa_minus_pb <= 0) ? a : b; |
| } |
| |
| static unsigned Predictor11(unsigned left, const unsigned* const top) { |
| const unsigned pred = Select(top[0], left, top[-1]); |
| return pred; |
| } |
| |
| typedef unsigned (*VP8LPredictorFunc)(unsigned left, const unsigned* const top); |
| |
| const VP8LPredictorFunc kPredictorsC[] = { |
| Predictor11, |
| }; |