diff options
author | Dr.Smile <vabnick@gmail.com> | 2014-11-06 02:57:03 +0300 |
---|---|---|
committer | Dr.Smile <vabnick@gmail.com> | 2014-11-06 02:57:03 +0300 |
commit | 26ccc19c66298ee7783f45e6534d4ddee90cca15 (patch) | |
tree | 8fc206a7432910ae2c317f6ce2dc1240c41596a2 /libass/ass_bitmap.c | |
parent | de756cf85b851c423a397ff7f8e4d98dbb0f5abb (diff) | |
download | libass-26ccc19c66298ee7783f45e6534d4ddee90cca15.tar.bz2 libass-26ccc19c66298ee7783f45e6534d4ddee90cca15.tar.xz |
Fix subpixel shadow shift
Diffstat (limited to 'libass/ass_bitmap.c')
-rw-r--r-- | libass/ass_bitmap.c | 46 |
1 files changed, 12 insertions, 34 deletions
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; } } } |