From f122dd6fb3f91600e1eeb1c7361ab0f341397807 Mon Sep 17 00:00:00 2001 From: Max Horn Date: Sat, 7 Aug 2004 16:47:25 +0000 Subject: Fix scaling of the borders of each given rect (for non-ASM version) svn-id: r14504 --- common/scaler/scale2x.cpp | 69 --------------------- common/scaler/scale3x.cpp | 150 --------------------------------------------- common/scaler/scalebit.cpp | 33 ---------- 3 files changed, 252 deletions(-) diff --git a/common/scaler/scale2x.cpp b/common/scaler/scale2x.cpp index 3684c94348..7fac295cb5 100644 --- a/common/scaler/scale2x.cpp +++ b/common/scaler/scale2x.cpp @@ -45,21 +45,7 @@ static inline void scale2x_8_def_single(scale2x_uint8* __restrict__ dst, const scale2x_uint8* __restrict__ src0, const scale2x_uint8* __restrict__ src1, const scale2x_uint8* __restrict__ src2, unsigned count) { - assert(count >= 2); - - /* first pixel */ - dst[0] = src1[0]; - if (src1[1] == src0[0] && src2[0] != src0[0]) - dst[1] = src0[0]; - else - dst[1] = src1[0]; - ++src0; - ++src1; - ++src2; - dst += 2; - /* central pixels */ - count -= 2; while (count) { if (src0[0] != src2[0] && src1[-1] != src1[1]) { dst[0] = src1[-1] == src0[0] ? src0[0] : src1[0]; @@ -75,32 +61,11 @@ static inline void scale2x_8_def_single(scale2x_uint8* __restrict__ dst, const s dst += 2; --count; } - - /* last pixel */ - if (src1[-1] == src0[0] && src2[0] != src0[0]) - dst[0] = src0[0]; - else - dst[0] = src1[0]; - dst[1] = src1[0]; } static inline void scale2x_16_def_single(scale2x_uint16* __restrict__ dst, const scale2x_uint16* __restrict__ src0, const scale2x_uint16* __restrict__ src1, const scale2x_uint16* __restrict__ src2, unsigned count) { - assert(count >= 2); - - /* first pixel */ - dst[0] = src1[0]; - if (src1[1] == src0[0] && src2[0] != src0[0]) - dst[1] = src0[0]; - else - dst[1] = src1[0]; - ++src0; - ++src1; - ++src2; - dst += 2; - /* central pixels */ - count -= 2; while (count) { if (src0[0] != src2[0] && src1[-1] != src1[1]) { dst[0] = src1[-1] == src0[0] ? src0[0] : src1[0]; @@ -116,32 +81,11 @@ static inline void scale2x_16_def_single(scale2x_uint16* __restrict__ dst, const dst += 2; --count; } - - /* last pixel */ - if (src1[-1] == src0[0] && src2[0] != src0[0]) - dst[0] = src0[0]; - else - dst[0] = src1[0]; - dst[1] = src1[0]; } static inline void scale2x_32_def_single(scale2x_uint32* __restrict__ dst, const scale2x_uint32* __restrict__ src0, const scale2x_uint32* __restrict__ src1, const scale2x_uint32* __restrict__ src2, unsigned count) { - assert(count >= 2); - - /* first pixel */ - dst[0] = src1[0]; - if (src1[1] == src0[0] && src2[0] != src0[0]) - dst[1] = src0[0]; - else - dst[1] = src1[0]; - ++src0; - ++src1; - ++src2; - dst += 2; - /* central pixels */ - count -= 2; while (count) { if (src0[0] != src2[0] && src1[-1] != src1[1]) { dst[0] = src1[-1] == src0[0] ? src0[0] : src1[0]; @@ -157,13 +101,6 @@ static inline void scale2x_32_def_single(scale2x_uint32* __restrict__ dst, const dst += 2; --count; } - - /* last pixel */ - if (src1[-1] == src0[0] && src2[0] != src0[0]) - dst[0] = src0[0]; - else - dst[0] = src1[0]; - dst[1] = src1[0]; } /** @@ -181,8 +118,6 @@ static inline void scale2x_32_def_single(scale2x_uint32* __restrict__ dst, const */ void scale2x_8_def(scale2x_uint8* dst0, scale2x_uint8* dst1, const scale2x_uint8* src0, const scale2x_uint8* src1, const scale2x_uint8* src2, unsigned count) { - assert(count >= 2); - scale2x_8_def_single(dst0, src0, src1, src2, count); scale2x_8_def_single(dst1, src2, src1, src0, count); } @@ -200,8 +135,6 @@ void scale2x_8_def(scale2x_uint8* dst0, scale2x_uint8* dst1, const scale2x_uint8 */ void scale2x_16_def(scale2x_uint16* dst0, scale2x_uint16* dst1, const scale2x_uint16* src0, const scale2x_uint16* src1, const scale2x_uint16* src2, unsigned count) { - assert(count >= 2); - scale2x_16_def_single(dst0, src0, src1, src2, count); scale2x_16_def_single(dst1, src2, src1, src0, count); } @@ -219,8 +152,6 @@ void scale2x_16_def(scale2x_uint16* dst0, scale2x_uint16* dst1, const scale2x_ui */ void scale2x_32_def(scale2x_uint32* dst0, scale2x_uint32* dst1, const scale2x_uint32* src0, const scale2x_uint32* src1, const scale2x_uint32* src2, unsigned count) { - assert(count >= 2); - scale2x_32_def_single(dst0, src0, src1, src2, count); scale2x_32_def_single(dst1, src2, src1, src0, count); } diff --git a/common/scaler/scale3x.cpp b/common/scaler/scale3x.cpp index 16e484d02b..7b69833228 100644 --- a/common/scaler/scale3x.cpp +++ b/common/scaler/scale3x.cpp @@ -45,22 +45,7 @@ static inline void scale3x_8_def_border(scale3x_uint8* __restrict__ dst, const scale3x_uint8* __restrict__ src0, const scale3x_uint8* __restrict__ src1, const scale3x_uint8* __restrict__ src2, unsigned count) { - assert(count >= 2); - - /* first pixel */ - dst[0] = src1[0]; - dst[1] = src1[0]; - if (src1[1] == src0[0] && src2[0] != src0[0]) - dst[2] = src0[0]; - else - dst[2] = src1[0]; - ++src0; - ++src1; - ++src2; - dst += 3; - /* central pixels */ - count -= 2; while (count) { if (src0[0] != src2[0] && src1[-1] != src1[1]) { dst[0] = src1[-1] == src0[0] ? src1[-1] : src1[0]; @@ -78,35 +63,11 @@ static inline void scale3x_8_def_border(scale3x_uint8* __restrict__ dst, const s dst += 3; --count; } - - /* last pixel */ - if (src1[-1] == src0[0] && src2[0] != src0[0]) - dst[0] = src0[0]; - else - dst[0] = src1[0]; - dst[1] = src1[0]; - dst[2] = src1[0]; } static inline void scale3x_8_def_center(scale3x_uint8* __restrict__ dst, const scale3x_uint8* __restrict__ src0, const scale3x_uint8* __restrict__ src1, const scale3x_uint8* __restrict__ src2, unsigned count) { - assert(count >= 2); - - /* first pixel */ - dst[0] = src1[0]; - dst[1] = src1[0]; - if (src0[0] != src2[0]) { - dst[2] = (src1[1] == src0[0] && src1[0] != src2[1]) || (src1[1] == src2[0] && src1[0] != src0[1]) ? src1[1] : src1[0]; - } else { - dst[2] = src1[0]; - } - ++src0; - ++src1; - ++src2; - dst += 3; - /* central pixels */ - count -= 2; while (count) { if (src0[0] != src2[0] && src1[-1] != src1[1]) { dst[0] = (src1[-1] == src0[0] && src1[0] != src2[-1]) || (src1[-1] == src2[0] && src1[0] != src0[-1]) ? src1[-1] : src1[0]; @@ -124,35 +85,11 @@ static inline void scale3x_8_def_center(scale3x_uint8* __restrict__ dst, const s dst += 3; --count; } - - /* last pixel */ - if (src0[0] != src2[0]) { - dst[0] = (src1[-1] == src0[0] && src1[0] != src2[-1]) || (src1[-1] == src2[0] && src1[0] != src0[-1]) ? src1[-1] : src1[0]; - } else { - dst[0] = src1[0]; - } - dst[1] = src1[0]; - dst[2] = src1[0]; } static inline void scale3x_16_def_border(scale3x_uint16* __restrict__ dst, const scale3x_uint16* __restrict__ src0, const scale3x_uint16* __restrict__ src1, const scale3x_uint16* __restrict__ src2, unsigned count) { - assert(count >= 2); - - /* first pixel */ - dst[0] = src1[0]; - dst[1] = src1[0]; - if (src1[1] == src0[0] && src2[0] != src0[0]) - dst[2] = src0[0]; - else - dst[2] = src1[0]; - ++src0; - ++src1; - ++src2; - dst += 3; - /* central pixels */ - count -= 2; while (count) { if (src0[0] != src2[0] && src1[-1] != src1[1]) { dst[0] = src1[-1] == src0[0] ? src1[-1] : src1[0]; @@ -170,35 +107,11 @@ static inline void scale3x_16_def_border(scale3x_uint16* __restrict__ dst, const dst += 3; --count; } - - /* last pixel */ - if (src1[-1] == src0[0] && src2[0] != src0[0]) - dst[0] = src0[0]; - else - dst[0] = src1[0]; - dst[1] = src1[0]; - dst[2] = src1[0]; } static inline void scale3x_16_def_center(scale3x_uint16* __restrict__ dst, const scale3x_uint16* __restrict__ src0, const scale3x_uint16* __restrict__ src1, const scale3x_uint16* __restrict__ src2, unsigned count) { - assert(count >= 2); - - /* first pixel */ - dst[0] = src1[0]; - dst[1] = src1[0]; - if (src0[0] != src2[0]) { - dst[2] = (src1[1] == src0[0] && src1[0] != src2[1]) || (src1[1] == src2[0] && src1[0] != src0[1]) ? src1[1] : src1[0]; - } else { - dst[2] = src1[0]; - } - ++src0; - ++src1; - ++src2; - dst += 3; - /* central pixels */ - count -= 2; while (count) { if (src0[0] != src2[0] && src1[-1] != src1[1]) { dst[0] = (src1[-1] == src0[0] && src1[0] != src2[-1]) || (src1[-1] == src2[0] && src1[0] != src0[-1]) ? src1[-1] : src1[0]; @@ -216,35 +129,11 @@ static inline void scale3x_16_def_center(scale3x_uint16* __restrict__ dst, const dst += 3; --count; } - - /* last pixel */ - if (src0[0] != src2[0]) { - dst[0] = (src1[-1] == src0[0] && src1[0] != src2[-1]) || (src1[-1] == src2[0] && src1[0] != src0[-1]) ? src1[-1] : src1[0]; - } else { - dst[0] = src1[0]; - } - dst[1] = src1[0]; - dst[2] = src1[0]; } static inline void scale3x_32_def_border(scale3x_uint32* __restrict__ dst, const scale3x_uint32* __restrict__ src0, const scale3x_uint32* __restrict__ src1, const scale3x_uint32* __restrict__ src2, unsigned count) { - assert(count >= 2); - - /* first pixel */ - dst[0] = src1[0]; - dst[1] = src1[0]; - if (src1[1] == src0[0] && src2[0] != src0[0]) - dst[2] = src0[0]; - else - dst[2] = src1[0]; - ++src0; - ++src1; - ++src2; - dst += 3; - /* central pixels */ - count -= 2; while (count) { if (src0[0] != src2[0] && src1[-1] != src1[1]) { dst[0] = src1[-1] == src0[0] ? src1[-1] : src1[0]; @@ -262,35 +151,11 @@ static inline void scale3x_32_def_border(scale3x_uint32* __restrict__ dst, const dst += 3; --count; } - - /* last pixel */ - if (src1[-1] == src0[0] && src2[0] != src0[0]) - dst[0] = src0[0]; - else - dst[0] = src1[0]; - dst[1] = src1[0]; - dst[2] = src1[0]; } static inline void scale3x_32_def_center(scale3x_uint32* __restrict__ dst, const scale3x_uint32* __restrict__ src0, const scale3x_uint32* __restrict__ src1, const scale3x_uint32* __restrict__ src2, unsigned count) { - assert(count >= 2); - - /* first pixel */ - dst[0] = src1[0]; - dst[1] = src1[0]; - if (src0[0] != src2[0]) { - dst[2] = (src1[1] == src0[0] && src1[0] != src2[1]) || (src1[1] == src2[0] && src1[0] != src0[1]) ? src1[1] : src1[0]; - } else { - dst[2] = src1[0]; - } - ++src0; - ++src1; - ++src2; - dst += 3; - /* central pixels */ - count -= 2; while (count) { if (src0[0] != src2[0] && src1[-1] != src1[1]) { dst[0] = (src1[-1] == src0[0] && src1[0] != src2[-1]) || (src1[-1] == src2[0] && src1[0] != src0[-1]) ? src1[-1] : src1[0]; @@ -308,15 +173,6 @@ static inline void scale3x_32_def_center(scale3x_uint32* __restrict__ dst, const dst += 3; --count; } - - /* last pixel */ - if (src0[0] != src2[0]) { - dst[0] = (src1[-1] == src0[0] && src1[0] != src2[-1]) || (src1[-1] == src2[0] && src1[0] != src0[-1]) ? src1[-1] : src1[0]; - } else { - dst[0] = src1[0]; - } - dst[1] = src1[0]; - dst[2] = src1[0]; } /** @@ -335,8 +191,6 @@ static inline void scale3x_32_def_center(scale3x_uint32* __restrict__ dst, const */ void scale3x_8_def(scale3x_uint8* dst0, scale3x_uint8* dst1, scale3x_uint8* dst2, const scale3x_uint8* src0, const scale3x_uint8* src1, const scale3x_uint8* src2, unsigned count) { - assert(count >= 2); - scale3x_8_def_border(dst0, src0, src1, src2, count); scale3x_8_def_center(dst1, src0, src1, src2, count); scale3x_8_def_border(dst2, src2, src1, src0, count); @@ -356,8 +210,6 @@ void scale3x_8_def(scale3x_uint8* dst0, scale3x_uint8* dst1, scale3x_uint8* dst2 */ void scale3x_16_def(scale3x_uint16* dst0, scale3x_uint16* dst1, scale3x_uint16* dst2, const scale3x_uint16* src0, const scale3x_uint16* src1, const scale3x_uint16* src2, unsigned count) { - assert(count >= 2); - scale3x_16_def_border(dst0, src0, src1, src2, count); scale3x_16_def_center(dst1, src0, src1, src2, count); scale3x_16_def_border(dst2, src2, src1, src0, count); @@ -377,8 +229,6 @@ void scale3x_16_def(scale3x_uint16* dst0, scale3x_uint16* dst1, scale3x_uint16* */ void scale3x_32_def(scale3x_uint32* dst0, scale3x_uint32* dst1, scale3x_uint32* dst2, const scale3x_uint32* src0, const scale3x_uint32* src1, const scale3x_uint32* src2, unsigned count) { - assert(count >= 2); - scale3x_32_def_border(dst0, src0, src1, src2, count); scale3x_32_def_center(dst1, src0, src1, src2, count); scale3x_32_def_border(dst2, src2, src1, src0, count); diff --git a/common/scaler/scalebit.cpp b/common/scaler/scalebit.cpp index ebe77093e6..8a9fbf1d41 100644 --- a/common/scaler/scalebit.cpp +++ b/common/scaler/scalebit.cpp @@ -120,11 +120,6 @@ static void scale2x(void* void_dst, unsigned dst_slice, const void* void_src, un count = height; - stage_scale2x(SCDST(0), SCDST(1), SCSRC(0), SCSRC(0), SCSRC(1), pixel, width); - - dst = SCDST(2); - - count -= 2; while (count) { stage_scale2x(SCDST(0), SCDST(1), SCSRC(0), SCSRC(1), SCSRC(2), pixel, width); @@ -134,8 +129,6 @@ static void scale2x(void* void_dst, unsigned dst_slice, const void* void_src, un --count; } - stage_scale2x(SCDST(0), SCDST(1), SCSRC(1-1), SCSRC(2-1), SCSRC(2-1), pixel, width); - #if defined(__GNUC__) && defined(__i386__) scale2x_mmx_emms(); #endif @@ -165,11 +158,6 @@ static void scale3x(void* void_dst, unsigned dst_slice, const void* void_src, un count = height; - stage_scale3x(SCDST(0), SCDST(1), SCDST(2), SCSRC(0), SCSRC(0), SCSRC(1), pixel, width); - - dst = SCDST(3); - - count -= 2; while (count) { stage_scale3x(SCDST(0), SCDST(1), SCDST(2), SCSRC(0), SCSRC(1), SCSRC(2), pixel, width); @@ -178,8 +166,6 @@ static void scale3x(void* void_dst, unsigned dst_slice, const void* void_src, un --count; } - - stage_scale3x(SCDST(0), SCDST(1), SCDST(2), SCSRC(1-1), SCSRC(2-1), SCSRC(2-1), pixel, width); } /** @@ -222,18 +208,6 @@ static void scale4x_buf(void* void_dst, unsigned dst_slice, void* void_mid, unsi mid[4] = mid[3] + mid_slice; mid[5] = mid[4] + mid_slice; - stage_scale2x(SCMID(-2+6), SCMID(-1+6), SCSRC(0), SCSRC(0), SCSRC(1), pixel, width); - stage_scale2x(SCMID(0), SCMID(1), SCSRC(0), SCSRC(1), SCSRC(2), pixel, width); - stage_scale2x(SCMID(2), SCMID(3), SCSRC(1), SCSRC(2), SCSRC(3), pixel, width); - stage_scale4x(SCDST(0), SCDST(1), SCDST(2), SCDST(3), SCMID(-2+6), SCMID(-2+6), SCMID(-1+6), SCMID(0), pixel, width); - - dst = SCDST(4); - - stage_scale4x(SCDST(0), SCDST(1), SCDST(2), SCDST(3), SCMID(-1+6), SCMID(0), SCMID(1), SCMID(2), pixel, width); - - dst = SCDST(4); - - count -= 4; while (count) { unsigned char* tmp; @@ -255,13 +229,6 @@ static void scale4x_buf(void* void_dst, unsigned dst_slice, void* void_mid, unsi --count; } - stage_scale2x(SCMID(4), SCMID(5), SCSRC(2), SCSRC(3), SCSRC(3), pixel, width); - stage_scale4x(SCDST(0), SCDST(1), SCDST(2), SCDST(3), SCMID(1), SCMID(2), SCMID(3), SCMID(4), pixel, width); - - dst = SCDST(4); - - stage_scale4x(SCDST(0), SCDST(1), SCDST(2), SCDST(3), SCMID(3), SCMID(4), SCMID(5), SCMID(5), pixel, width); - #if defined(__GNUC__) && defined(__i386__) scale2x_mmx_emms(); #endif -- cgit v1.2.3