From 26ccc19c66298ee7783f45e6534d4ddee90cca15 Mon Sep 17 00:00:00 2001 From: "Dr.Smile" Date: Thu, 6 Nov 2014 02:57:03 +0300 Subject: Fix subpixel shadow shift --- libass/ass_bitmap.c | 46 ++++++++++++---------------------------------- 1 file changed, 12 insertions(+), 34 deletions(-) (limited to 'libass/ass_bitmap.c') diff --git a/libass/ass_bitmap.c b/libass/ass_bitmap.c index 1f719f8..9a98f5a 100644 --- a/libass/ass_bitmap.c +++ b/libass/ass_bitmap.c @@ -327,45 +327,23 @@ void shift_bitmap(Bitmap *bm, int shift_x, int shift_y) int s = bm->stride; unsigned char *buf = bm->buffer; + assert((shift_x & ~63) == 0 && (shift_y & ~63) == 0); + // Shift in x direction - if (shift_x > 0) { - shift_x &= 0x3F; - for (y = 0; y < h; y++) { - for (x = w - 1; x > 0; x--) { - b = (buf[x + y * s - 1] * shift_x) >> 6; - buf[x + y * s - 1] -= b; - buf[x + y * s] += b; - } - } - } else if (shift_x < 0) { - shift_x = -shift_x & 0x3F; - for (y = 0; y < h; y++) { - for (x = 0; x < w - 1; x++) { - b = (buf[x + y * s + 1] * shift_x) >> 6; - buf[x + y * s + 1] -= b; - buf[x + y * s] += b; - } + for (y = 0; y < h; y++) { + for (x = w - 1; x > 0; x--) { + b = (buf[x + y * s - 1] * shift_x) >> 6; + buf[x + y * s - 1] -= b; + buf[x + y * s] += b; } } // Shift in y direction - if (shift_y > 0) { - shift_y &= 0x3F; - for (x = 0; x < w; x++) { - for (y = h - 1; y > 0; y--) { - b = (buf[x + (y - 1) * s] * shift_y) >> 6; - buf[x + (y - 1) * s] -= b; - buf[x + y * s] += b; - } - } - } else if (shift_y < 0) { - shift_y = -shift_y & 0x3F; - for (x = 0; x < w; x++) { - for (y = 0; y < h - 1; y++) { - b = (buf[x + (y + 1) * s] * shift_y) >> 6; - buf[x + (y + 1) * s] -= b; - buf[x + y * s] += b; - } + for (x = 0; x < w; x++) { + for (y = h - 1; y > 0; y--) { + b = (buf[x + (y - 1) * s] * shift_y) >> 6; + buf[x + (y - 1) * s] -= b; + buf[x + y * s] += b; } } } -- cgit v1.2.3