summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libvo/font_load.c20
-rw-r--r--libvo/mga_common.c6
-rw-r--r--libvo/vo_x11.c9
-rw-r--r--libvo/vo_xv.c6
4 files changed, 29 insertions, 12 deletions
diff --git a/libvo/font_load.c b/libvo/font_load.c
index dd12cafabe..184349000f 100644
--- a/libvo/font_load.c
+++ b/libvo/font_load.c
@@ -199,7 +199,8 @@ for(i=0;i<=fontdb;i++){
printf("font: Missing bitmap(s) for sub-font #%d\n",i);
return NULL;
}
- if(factor!=1.0f){
+ //if(factor!=1.0f)
+ {
// re-sample alpha
int f=factor*256.0f;
int size=desc->pic_a[i]->w*desc->pic_a[i]->h;
@@ -208,12 +209,21 @@ for(i=0;i<=fontdb;i++){
for(j=0;j<size;j++){
int x=desc->pic_a[i]->bmp[j];
int y=desc->pic_b[i]->bmp[j];
-
- x=((x*f*(255-y))>>16)+y;
+
+ x=((x*f)>>8); // scale
+ if(x<0) x=0; else if(x>255) x=255;
+ x^=255; // invert
+
+ if(x+y>255) x=255-y; // to avoid overflows
+
+ //x=0;
+ //x=((x*f*(255-y))>>16);
+ //x=((x*f*(255-y))>>16)+y;
//x=(x*f)>>8;if(x<y) x=y;
- if(x<0) x=0; else
- if(x>255) x=255;
+ if(x<1) x=1; else
+ if(x>=252) x=0;
+
desc->pic_a[i]->bmp[j]=x;
}
printf("DONE!\n");
diff --git a/libvo/mga_common.c b/libvo/mga_common.c
index 8779c68d19..25a54be8c8 100644
--- a/libvo/mga_common.c
+++ b/libvo/mga_common.c
@@ -18,7 +18,8 @@ static void draw_alpha(int x0,int y0, int w,int h, unsigned char* src, unsigned
for(x=0;x<w;x++){
// dst[x]=(dst[x]*srca[x]+src[x]*(srca[x]^255))>>8;
if(srca[x])
- dst[x]=(dst[x]*(srca[x]^255)+src[x]*(srca[x]))>>8;
+ dst[x]=((dst[x]*srca[x])>>8)+src[x];
+ //dst[x]=(dst[x]*(srca[x]^255)+src[x]*(srca[x]))>>8;
}
src+=stride;
srca+=stride;
@@ -31,7 +32,8 @@ static void draw_alpha(int x0,int y0, int w,int h, unsigned char* src, unsigned
for(x=0;x<w;x++){
// dst[x]=(dst[x]*srca[x]+src[x]*(srca[x]^255))>>8;
if(srca[x])
- dst[2*x]=(dst[2*x]*(srca[x]^255)+src[x]*(srca[x]))>>8;
+ dst[2*x]=((dst[2*x]*srca[x])>>8)+src[x];
+ //dst[2*x]=(dst[2*x]*(srca[x]^255)+src[x]*(srca[x]))>>8;
}
src+=stride;
srca+=stride;
diff --git a/libvo/vo_x11.c b/libvo/vo_x11.c
index a7d12a7027..1e6294a99f 100644
--- a/libvo/vo_x11.c
+++ b/libvo/vo_x11.c
@@ -392,9 +392,12 @@ static void draw_alpha(int x0,int y0, int w,int h, unsigned char* src, unsigned
for(x=0;x<w;x++){
// dst[x]=(dst[x]*srca[x]+src[x]*(srca[x]^255))>>8;
if(srca[x]){
- dst[0]=(dst[0]*(srca[x]^255)+src[x]*(srca[x]))>>8;
- dst[1]=(dst[1]*(srca[x]^255)+src[x]*(srca[x]))>>8;
- dst[2]=(dst[2]*(srca[x]^255)+src[x]*(srca[x]))>>8;
+ dst[0]=((dst[0]*srca[x])>>8)+src[x];
+ dst[1]=((dst[1]*srca[x])>>8)+src[x];
+ dst[2]=((dst[2]*srca[x])>>8)+src[x];
+ //dst[0]=(dst[0]*(srca[x]^255)+src[x]*(srca[x]))>>8;
+ //dst[1]=(dst[1]*(srca[x]^255)+src[x]*(srca[x]))>>8;
+ //dst[2]=(dst[2]*(srca[x]^255)+src[x]*(srca[x]))>>8;
}
dst+=dbpp;
}
diff --git a/libvo/vo_xv.c b/libvo/vo_xv.c
index 3436f14e10..06d38097fb 100644
--- a/libvo/vo_xv.c
+++ b/libvo/vo_xv.c
@@ -264,7 +264,8 @@ static void draw_alpha(int x0,int y0, int w,int h, unsigned char* src, unsigned
for(x=0;x<w;x++){
// dst[x]=(dst[x]*srca[x]+src[x]*(srca[x]^255))>>8;
if(srca[x])
- dst[x]=(dst[x]*(srca[x]^255)+src[x]*(srca[x]))>>8;
+// dst[x]=(dst[x]*(srca[x]^255)+src[x]*(srca[x]))>>8;
+ dst[x]=((dst[x]*srca[x])>>8)+src[x];
}
src+=stride;
srca+=stride;
@@ -277,7 +278,8 @@ static void draw_alpha(int x0,int y0, int w,int h, unsigned char* src, unsigned
for(x=0;x<w;x++){
// dst[x]=(dst[x]*srca[x]+src[x]*(srca[x]^255))>>8;
if(srca[x])
- dst[2*x]=(dst[2*x]*(srca[x]^255)+src[x]*(srca[x]))>>8;
+// dst[2*x]=(dst[2*x]*(srca[x]^255)+src[x]*(srca[x]))>>8;
+ dst[2*x]=((dst[2*x]*srca[x])>>8)+src[x];
}
src+=stride;
srca+=stride;