diff options
author | greg <greg@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2009-03-08 15:30:27 +0000 |
---|---|---|
committer | greg <greg@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2009-03-08 15:30:27 +0000 |
commit | 68e768cb68f7e40a0ac930e528a20159fa61ad0e (patch) | |
tree | 6f8de26931de24be1b8817bdc1a3bcfdd491c7e7 | |
parent | 82ed1c0217af2b85c5eaabdcaa87ecb2245aa4b0 (diff) | |
download | libass-68e768cb68f7e40a0ac930e528a20159fa61ad0e.tar.bz2 libass-68e768cb68f7e40a0ac930e528a20159fa61ad0e.tar.xz |
Don't assume width == stride for bitmap composition.
Fixes http://bugzilla.mplayerhq.hu/show_bug.cgi?id=1421
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@28891 b3059339-0415-0410-9bf9-f77b7e298cf2
-rw-r--r-- | libass/ass_render.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/libass/ass_render.c b/libass/ass_render.c index c582432..b46bc9e 100644 --- a/libass/ass_render.c +++ b/libass/ass_render.c @@ -423,10 +423,12 @@ static void render_overlap(ass_image_t** last_tail, ass_image_t** tail, bitmap_h int ax = (*last_tail)->dst_x; int ay = (*last_tail)->dst_y; int aw = (*last_tail)->w; + int as = (*last_tail)->stride; int ah = (*last_tail)->h; int bx = (*tail)->dst_x; int by = (*tail)->dst_y; int bw = (*tail)->w; + int bs = (*tail)->stride; int bh = (*tail)->h; unsigned char* a; unsigned char* b; @@ -472,16 +474,16 @@ static void render_overlap(ass_image_t** last_tail, ass_image_t** tail, bitmap_h // Allocate new bitmaps and copy over data a = (*last_tail)->bitmap; b = (*tail)->bitmap; - (*last_tail)->bitmap = malloc(aw*ah); - (*tail)->bitmap = malloc(bw*bh); - memcpy((*last_tail)->bitmap, a, aw*ah); - memcpy((*tail)->bitmap, b, bw*bh); + (*last_tail)->bitmap = malloc(as*ah); + (*tail)->bitmap = malloc(bs*bh); + memcpy((*last_tail)->bitmap, a, as*ah); + memcpy((*tail)->bitmap, b, bs*bh); // Composite overlapping area for (y=0; y<h; y++) for (x=0; x<w; x++) { - opos = (old_top+y)*(aw) + (old_left+x); - cpos = (cur_top+y)*(bw) + (cur_left+x); + opos = (old_top+y)*(as) + (old_left+x); + cpos = (cur_top+y)*(bs) + (cur_left+x); m = (a[opos] > b[cpos]) ? a[opos] : b[cpos]; (*last_tail)->bitmap[opos] = 0; (*tail)->bitmap[cpos] = m; |