Simplify and optimize bitmap blending.

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@20018 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
eugeni 2006-10-02 17:30:18 +00:00
parent 915bfd16f0
commit 4f3df622bf
1 changed files with 12 additions and 31 deletions

View File

@ -296,44 +296,25 @@ static void my_draw_bitmap(struct vf_instance_s* vf, unsigned char* bitmap, int
unsigned char u = rgba2u(color); unsigned char u = rgba2u(color);
unsigned char v = rgba2v(color); unsigned char v = rgba2v(color);
unsigned char opacity = 255 - _a(color); unsigned char opacity = 255 - _a(color);
unsigned char* src; unsigned char *src, *dsty, *dstu, *dstv;
unsigned char* dst;
int i, j; int i, j;
mp_image_t* dmpi = vf->dmpi; mp_image_t* dmpi = vf->dmpi;
src = bitmap; src = bitmap;
dst = dmpi->planes[0] + dst_x + dst_y * dmpi->stride[0]; dsty = dmpi->planes[0] + dst_x + dst_y * dmpi->stride[0];
for(i = 0; i < bitmap_h; ++i) dstu = vf->priv->planes[1] + dst_x + dst_y * 2 * dmpi->chroma_width;
{ dstv = vf->priv->planes[2] + dst_x + dst_y * 2 * dmpi->chroma_width;
for (j = 0; j < bitmap_w; ++j) {
// unsigned k = *(src+j);
unsigned k = ((unsigned)*(bitmap + stride * i + j)) * opacity / 255;
unsigned char orig_color = *(dst+j);
*(dst+j) = (k*y + (255-k)*orig_color) / 255;
}
src += stride;
dst += dmpi->stride[0];
}
for (i = 0; i < bitmap_h; ++i) { for (i = 0; i < bitmap_h; ++i) {
for (j = 0; j < bitmap_w; ++j) { for (j = 0; j < bitmap_w; ++j) {
int x = dst_x + j; unsigned k = ((unsigned)src[j]) * opacity / 255;
int y = dst_y + i; dsty[j] = (k*y + (255-k)*dsty[j]) / 255;
unsigned k; dstu[j] = (k*u + (255-k)*dstu[j]) / 255;
unsigned char orig_u, orig_v; dstv[j] = (k*v + (255-k)*dstv[j]) / 255;
unsigned char new_u, new_v;
k = ((unsigned)*(bitmap + stride * i + j)) * opacity / 255;
orig_u = *(vf->priv->planes[1] + x + y * 2 * dmpi->chroma_width);
new_u = (k*u + (255-k)*orig_u) / 255;
*(vf->priv->planes[1] + x + y * 2 * dmpi->chroma_width) = new_u;
orig_v = *(vf->priv->planes[2] + x + y * 2 * dmpi->chroma_width);
new_v = (k*v + (255-k)*orig_v) / 255;
*(vf->priv->planes[2] + x + y * 2 * dmpi->chroma_width) = new_v;
} }
src += stride;
dsty += dmpi->stride[0];
dstu += 2 * dmpi->chroma_width;
dstv += 2 * dmpi->chroma_width;
} }
} }