aboutsummaryrefslogtreecommitdiff
path: root/common/scaler
diff options
context:
space:
mode:
authorMax Horn2004-08-07 16:47:25 +0000
committerMax Horn2004-08-07 16:47:25 +0000
commitf122dd6fb3f91600e1eeb1c7361ab0f341397807 (patch)
tree81a8d10840376b567535a9935e081fc029dbc6e7 /common/scaler
parent0f6242dfafd34ee228c0bf0f5e856eae9320acb5 (diff)
downloadscummvm-rg350-f122dd6fb3f91600e1eeb1c7361ab0f341397807.tar.gz
scummvm-rg350-f122dd6fb3f91600e1eeb1c7361ab0f341397807.tar.bz2
scummvm-rg350-f122dd6fb3f91600e1eeb1c7361ab0f341397807.zip
Fix scaling of the borders of each given rect (for non-ASM version)
svn-id: r14504
Diffstat (limited to 'common/scaler')
-rw-r--r--common/scaler/scale2x.cpp69
-rw-r--r--common/scaler/scale3x.cpp150
-rw-r--r--common/scaler/scalebit.cpp33
3 files changed, 0 insertions, 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