From 2042c6d5701e5bf9431f5886e5440f68d3e57d38 Mon Sep 17 00:00:00 2001 From: Max Horn Date: Mon, 26 Jan 2009 16:45:21 +0000 Subject: Slightly improved interpolate32_1_1 svn-id: r36075 --- graphics/scaler/intern.h | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/graphics/scaler/intern.h b/graphics/scaler/intern.h index 2e3760b70a..8f1b546685 100644 --- a/graphics/scaler/intern.h +++ b/graphics/scaler/intern.h @@ -40,12 +40,13 @@ /** * Interpolate two 16 bit pixel *pairs* at once with equal weights 1. - * In particular, A and B can contain two pixels/each in the upper - * and lower halves. + * In particular, p1 and p2 can contain two pixels each in the upper + * and lower halves. Requires only 5 operations! + * See for details on how this works. */ template -static inline uint32 interpolate32_1_1(uint32 A, uint32 B) { - return (((A & kHighBitsMask) + (B & kHighBitsMask)) >> 1) + (A & B & kLowBitsMask); +static inline uint32 interpolate32_1_1(uint32 p1, uint32 p2) { + return (p1 + p2 - ((p1 ^ p2) & kLowBitsMask)) >> 1; } /** -- cgit v1.2.3