diff --git a/Utilities/KreedSaiEagle/2xSai.cpp b/Utilities/KreedSaiEagle/2xSai.cpp index 8ee7b7a2..d35e0555 100644 --- a/Utilities/KreedSaiEagle/2xSai.cpp +++ b/Utilities/KreedSaiEagle/2xSai.cpp @@ -22,32 +22,25 @@ #define twoxsai_interpolate2_xrgb8888(A, B, C, D) ((((A) & 0xFCFCFCFC) >> 2) + (((B) & 0xFCFCFCFC) >> 2) + (((C) & 0xFCFCFCFC) >> 2) + (((D) & 0xFCFCFCFC) >> 2) + (((((A) & 0x03030303) + ((B) & 0x03030303) + ((C) & 0x03030303) + ((D) & 0x03030303)) >> 2) & 0x03030303)) -#define twoxsai_interpolate_rgb565(A, B) ((((A) & 0xF7DE) >> 1) + (((B) & 0xF7DE) >> 1) + ((A) & (B) & 0x0821)) - -#define twoxsai_interpolate2_rgb565(A, B, C, D) ((((A) & 0xE79C) >> 2) + (((B) & 0xE79C) >> 2) + (((C) & 0xE79C) >> 2) + (((D) & 0xE79C) >> 2) + (((((A) & 0x1863) + ((B) & 0x1863) + ((C) & 0x1863) + ((D) & 0x1863)) >> 2) & 0x1863)) - -#define twoxsai_interpolate_4444(A, B) (((A & 0xEEEE) >> 1) + ((B & 0xEEEE) >> 1) + (A & B & 0x1111)) -#define twoxsai_interpolate2_4444(A, B, C, D) (((A & 0xCCCC) >> 2) + ((B & 0xCCCC) >> 2) + ((C & 0xCCCC) >> 2) + ((D & 0xCCCC) >> 2) + ((((A & 0x3333) + (B & 0x3333) + (C & 0x3333) + (D & 0x3333)) >> 2) & 0x3333)) - #define twoxsai_result(A, B, C, D) (((A) != (C) || (A) != (D)) - ((B) != (C) || (B) != (D))); -#define twoxsai_declare_variables(typename_t, in, nextline) \ +#define twoxsai_declare_variables(typename_t, in) \ typename_t product, product1, product2; \ - typename_t colorI = *(in - nextline - 1); \ - typename_t colorE = *(in - nextline + 0); \ - typename_t colorF = *(in - nextline + 1); \ - typename_t colorJ = *(in - nextline + 2); \ - typename_t colorG = *(in - 1); \ + typename_t colorI = *(in - prevline - prevcolumn); \ + typename_t colorE = *(in - prevline + 0); \ + typename_t colorF = *(in - prevline + nextcolumn); \ + typename_t colorJ = *(in - prevline + nextcolumn2); \ + typename_t colorG = *(in - prevcolumn); \ typename_t colorA = *(in + 0); \ - typename_t colorB = *(in + 1); \ - typename_t colorK = *(in + 2); \ - typename_t colorH = *(in + nextline - 1); \ + typename_t colorB = *(in + nextcolumn); \ + typename_t colorK = *(in + nextcolumn2); \ + typename_t colorH = *(in + nextline - prevcolumn); \ typename_t colorC = *(in + nextline + 0); \ - typename_t colorD = *(in + nextline + 1); \ - typename_t colorL = *(in + nextline + 2); \ - typename_t colorM = *(in + nextline + nextline - 1); \ - typename_t colorN = *(in + nextline + nextline + 0); \ - typename_t colorO = *(in + nextline + nextline + 1); + typename_t colorD = *(in + nextline + nextcolumn); \ + typename_t colorL = *(in + nextline + nextcolumn2); \ + typename_t colorM = *(in + nextline2 - prevcolumn); \ + typename_t colorN = *(in + nextline2 + 0); \ + typename_t colorO = *(in + nextline2 + nextcolumn); \ #ifndef twoxsai_function #define twoxsai_function(result_cb, interpolate_cb, interpolate2_cb) \ @@ -140,12 +133,21 @@ void twoxsai_generic_xrgb8888(unsigned width, unsigned height, uint32_t *src, unsigned src_stride, uint32_t *dst, unsigned dst_stride) { unsigned finish; + int y = 0; + int x = 0; for(; height; height--) { uint32_t *in = (uint32_t*)src; uint32_t *out = (uint32_t*)dst; + int prevline = (y > 0 ? src_stride : 0); + int nextline = (height > 1 ? src_stride : 0); + int nextline2 = (height > 2 ? src_stride * 2 : nextline); + for(finish = width; finish; finish -= 1) { - twoxsai_declare_variables(uint32_t, in, (height > 1 ? src_stride : 0)); + int prevcolumn = (x > 0 ? 1 : 0); + int nextcolumn = (finish > 1 ? 1 : 0); + int nextcolumn2 = (finish > 2 ? 2 : nextcolumn); + twoxsai_declare_variables(uint32_t, in); /* * Map of the pixels: I|E F|J @@ -155,9 +157,12 @@ void twoxsai_generic_xrgb8888(unsigned width, unsigned height, uint32_t *src, un */ twoxsai_function(twoxsai_result, twoxsai_interpolate_xrgb8888, twoxsai_interpolate2_xrgb8888); + x++; } src += src_stride; dst += 2 * dst_stride; + y++; + x = 0; } } diff --git a/Utilities/KreedSaiEagle/Super2xSai.cpp b/Utilities/KreedSaiEagle/Super2xSai.cpp index ec1b97ac..ee9d7b2c 100644 --- a/Utilities/KreedSaiEagle/Super2xSai.cpp +++ b/Utilities/KreedSaiEagle/Super2xSai.cpp @@ -22,31 +22,27 @@ #define supertwoxsai_interpolate2_xrgb8888(A, B, C, D) ((((A) & 0xFCFCFCFC) >> 2) + (((B) & 0xFCFCFCFC) >> 2) + (((C) & 0xFCFCFCFC) >> 2) + (((D) & 0xFCFCFCFC) >> 2) + (((((A) & 0x03030303) + ((B) & 0x03030303) + ((C) & 0x03030303) + ((D) & 0x03030303)) >> 2) & 0x03030303)) -#define supertwoxsai_interpolate_rgb565(A, B) ((((A) & 0xF7DE) >> 1) + (((B) & 0xF7DE) >> 1) + ((A) & (B) & 0x0821)); - -#define supertwoxsai_interpolate2_rgb565(A, B, C, D) ((((A) & 0xE79C) >> 2) + (((B) & 0xE79C) >> 2) + (((C) & 0xE79C) >> 2) + (((D) & 0xE79C) >> 2) + (((((A) & 0x1863) + ((B) & 0x1863) + ((C) & 0x1863) + ((D) & 0x1863)) >> 2) & 0x1863)) - #define supertwoxsai_result(A, B, C, D) (((A) != (C) || (A) != (D)) - ((B) != (C) || (B) != (D))) #ifndef supertwoxsai_declare_variables -#define supertwoxsai_declare_variables(typename_t, in, nextline) \ +#define supertwoxsai_declare_variables(typename_t, in) \ typename_t product1a, product1b, product2a, product2b; \ - const typename_t colorB0 = *(in - nextline - 1); \ - const typename_t colorB1 = *(in - nextline + 0); \ - const typename_t colorB2 = *(in - nextline + 1); \ - const typename_t colorB3 = *(in - nextline + 2); \ - const typename_t color4 = *(in - 1); \ + const typename_t colorB0 = *(in - prevline - prevcolumn); \ + const typename_t colorB1 = *(in - prevline + 0); \ + const typename_t colorB2 = *(in - prevline + nextcolumn); \ + const typename_t colorB3 = *(in - prevline + nextcolumn2); \ + const typename_t color4 = *(in - prevcolumn); \ const typename_t color5 = *(in + 0); \ - const typename_t color6 = *(in + 1); \ - const typename_t colorS2 = *(in + 2); \ - const typename_t color1 = *(in + nextline - 1); \ + const typename_t color6 = *(in + nextcolumn); \ + const typename_t colorS2 = *(in + nextcolumn2); \ + const typename_t color1 = *(in + nextline - prevcolumn); \ const typename_t color2 = *(in + nextline + 0); \ - const typename_t color3 = *(in + nextline + 1); \ - const typename_t colorS1 = *(in + nextline + 2); \ - const typename_t colorA0 = *(in + nextline + nextline - 1); \ - const typename_t colorA1 = *(in + nextline + nextline + 0); \ - const typename_t colorA2 = *(in + nextline + nextline + 1); \ - const typename_t colorA3 = *(in + nextline + nextline + 2) + const typename_t color3 = *(in + nextline + nextcolumn); \ + const typename_t colorS1 = *(in + nextline + nextcolumn2); \ + const typename_t colorA0 = *(in + nextline2 - prevcolumn); \ + const typename_t colorA1 = *(in + nextline2 + 0); \ + const typename_t colorA2 = *(in + nextline2 + nextcolumn); \ + const typename_t colorA3 = *(in + nextline2 + nextcolumn2) #endif #ifndef supertwoxsai_function @@ -115,12 +111,21 @@ void supertwoxsai_generic_xrgb8888(unsigned width, unsigned height, uint32_t *src, unsigned src_stride, uint32_t *dst, unsigned dst_stride) { unsigned finish; + int y = 0; + int x = 0; for(; height; height--) { uint32_t *in = (uint32_t*)src; uint32_t *out = (uint32_t*)dst; + int prevline = (y > 0 ? src_stride : 0); + int nextline = (height > 1 ? src_stride : 0); + int nextline2 = (height > 2 ? src_stride * 2 : nextline); + for(finish = width; finish; finish -= 1) { - supertwoxsai_declare_variables(uint32_t, in, (height > 1 ? src_stride : 0)); + int prevcolumn = (x > 0 ? 1 : 0); + int nextcolumn = (finish > 1 ? 1 : 0); + int nextcolumn2 = (finish > 2 ? 2 : nextcolumn); + supertwoxsai_declare_variables(uint32_t, in); //--------------------------- B1 B2 // 4 5 6 S2 @@ -129,9 +134,12 @@ void supertwoxsai_generic_xrgb8888(unsigned width, unsigned height, uint32_t *sr //-------------------------------------- supertwoxsai_function(supertwoxsai_result, supertwoxsai_interpolate_xrgb8888, supertwoxsai_interpolate2_xrgb8888); + x++; } src += src_stride; dst += 2 * dst_stride; + y++; + x = 0; } } \ No newline at end of file diff --git a/Utilities/KreedSaiEagle/SuperEagle.cpp b/Utilities/KreedSaiEagle/SuperEagle.cpp index 4bb22d9c..11c15d73 100644 --- a/Utilities/KreedSaiEagle/SuperEagle.cpp +++ b/Utilities/KreedSaiEagle/SuperEagle.cpp @@ -22,26 +22,22 @@ #define supereagle_interpolate2_xrgb8888(A, B, C, D) ((((A) & 0xFCFCFCFC) >> 2) + (((B) & 0xFCFCFCFC) >> 2) + (((C) & 0xFCFCFCFC) >> 2) + (((D) & 0xFCFCFCFC) >> 2) + (((((A) & 0x03030303) + ((B) & 0x03030303) + ((C) & 0x03030303) + ((D) & 0x03030303)) >> 2) & 0x03030303)) -#define supereagle_interpolate_rgb565(A, B) ((((A) & 0xF7DE) >> 1) + (((B) & 0xF7DE) >> 1) + ((A) & (B) & 0x0821)); - -#define supereagle_interpolate2_rgb565(A, B, C, D) ((((A) & 0xE79C) >> 2) + (((B) & 0xE79C) >> 2) + (((C) & 0xE79C) >> 2) + (((D) & 0xE79C) >> 2) + (((((A) & 0x1863) + ((B) & 0x1863) + ((C) & 0x1863) + ((D) & 0x1863)) >> 2) & 0x1863)) - #define supereagle_result(A, B, C, D) (((A) != (C) || (A) != (D)) - ((B) != (C) || (B) != (D))); -#define supereagle_declare_variables(typename_t, in, nextline) \ +#define supereagle_declare_variables(typename_t, in) \ typename_t product1a, product1b, product2a, product2b; \ - const typename_t colorB1 = *(in - nextline + 0); \ - const typename_t colorB2 = *(in - nextline + 1); \ - const typename_t color4 = *(in - 1); \ + const typename_t colorB1 = *(in - prevline + 0); \ + const typename_t colorB2 = *(in - prevline + nextcolumn); \ + const typename_t color4 = *(in - prevcolumn); \ const typename_t color5 = *(in + 0); \ - const typename_t color6 = *(in + 1); \ - const typename_t colorS2 = *(in + 2); \ - const typename_t color1 = *(in + nextline - 1); \ + const typename_t color6 = *(in + nextcolumn); \ + const typename_t colorS2 = *(in + nextcolumn2); \ + const typename_t color1 = *(in + nextline - prevcolumn); \ const typename_t color2 = *(in + nextline + 0); \ - const typename_t color3 = *(in + nextline + 1); \ - const typename_t colorS1 = *(in + nextline + 2); \ - const typename_t colorA1 = *(in + nextline + nextline + 0); \ - const typename_t colorA2 = *(in + nextline + nextline + 1) + const typename_t color3 = *(in + nextline + nextcolumn); \ + const typename_t colorS1 = *(in + nextline + nextcolumn2); \ + const typename_t colorA1 = *(in + nextline2 + 0); \ + const typename_t colorA2 = *(in + nextline2 + nextcolumn) #ifndef supereagle_function #define supereagle_function(result_cb, interpolate_cb, interpolate2_cb) \ @@ -132,17 +128,29 @@ void supereagle_generic_xrgb8888(unsigned width, unsigned height, uint32_t *src, unsigned src_stride, uint32_t *dst, unsigned dst_stride) { unsigned finish; + int y = 0; + int x = 0; for(; height; height--) { uint32_t *in = (uint32_t*)src; uint32_t *out = (uint32_t*)dst; + int prevline = (y > 0 ? src_stride : 0); + int nextline = (height > 1 ? src_stride : 0); + int nextline2 = (height > 2 ? src_stride * 2 : nextline); + for(finish = width; finish; finish -= 1) { - supereagle_declare_variables(uint32_t, in, (height > 1 ? src_stride : 0)); + int prevcolumn = (x > 0 ? 1 : 0); + int nextcolumn = (finish > 1 ? 1 : 0); + int nextcolumn2 = (finish > 2 ? 2 : nextcolumn); + supereagle_declare_variables(uint32_t, in); supereagle_function(supereagle_result, supereagle_interpolate_xrgb8888, supereagle_interpolate2_xrgb8888); + x++; } src += src_stride; dst += 2 * dst_stride; + y++; + x = 0; } } \ No newline at end of file