Mercurial > mplayer.hg
changeset 28856:b9edcb7200e7
Don't assume width == stride for bitmap composition.
Fixes http://bugzilla.mplayerhq.hu/show_bug.cgi?id=1421
author | greg |
---|---|
date | Sun, 08 Mar 2009 15:30:27 +0000 |
parents | 07c168210a73 |
children | cd7f1297d54f |
files | libass/ass_render.c |
diffstat | 1 files changed, 8 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/libass/ass_render.c Sun Mar 08 15:20:14 2009 +0000 +++ b/libass/ass_render.c Sun Mar 08 15:30:27 2009 +0000 @@ -423,10 +423,12 @@ 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 @@ // 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;