From 4eff90e3800079ebe14b125d518f6abd773d368f Mon Sep 17 00:00:00 2001 From: arpi_esp Date: Thu, 29 Mar 2001 16:06:36 +0000 Subject: OSD/SUB image quality & speed improvement git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@250 b3059339-0415-0410-9bf9-f77b7e298cf2 --- libvo/font_load.c | 20 +++++++++++++++----- libvo/mga_common.c | 6 ++++-- libvo/vo_x11.c | 9 ++++++--- libvo/vo_xv.c | 6 ++++-- 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;jpic_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(x255) 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>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>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>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>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>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; -- cgit v1.2.3