Mercurial > mplayer.hg
comparison libvo/osd.c @ 947:76fd9463b9d3
FAST_OSD option to disable font outline antialiasing
author | arpi_esp |
---|---|
date | Sat, 02 Jun 2001 16:02:38 +0000 |
parents | 6737025afed0 |
children | d363fde389b5 |
comparison
equal
deleted
inserted
replaced
946:5cbef0829f82 | 947:76fd9463b9d3 |
---|---|
1 // Generic alpha renderers for all YUV modes and RGB depths. | 1 // Generic alpha renderers for all YUV modes and RGB depths. |
2 // These are "reference implementations", should be optimized later (MMX, etc) | 2 // These are "reference implementations", should be optimized later (MMX, etc) |
3 | 3 |
4 //#define FAST_OSD | |
5 //#define FAST_OSD_TABLE | |
6 | |
7 #include "config.h" | |
4 #include "osd.h" | 8 #include "osd.h" |
5 | 9 |
6 void vo_draw_alpha_yv12(int w,int h, unsigned char* src, unsigned char *srca, int srcstride, unsigned char* dstbase,int dststride){ | 10 void vo_draw_alpha_yv12(int w,int h, unsigned char* src, unsigned char *srca, int srcstride, unsigned char* dstbase,int dststride){ |
7 int y; | 11 int y; |
12 #ifdef FAST_OSD | |
13 w=w>>1; | |
14 #endif | |
8 for(y=0;y<h;y++){ | 15 for(y=0;y<h;y++){ |
9 register int x; | 16 register int x; |
10 for(x=0;x<w;x++){ | 17 for(x=0;x<w;x++){ |
18 #ifdef FAST_OSD | |
19 if(srca[2*x+0]) dstbase[2*x+0]=src[2*x+0]; | |
20 if(srca[2*x+1]) dstbase[2*x+1]=src[2*x+1]; | |
21 #else | |
11 if(srca[x]) dstbase[x]=((dstbase[x]*srca[x])>>8)+src[x]; | 22 if(srca[x]) dstbase[x]=((dstbase[x]*srca[x])>>8)+src[x]; |
23 #endif | |
12 } | 24 } |
13 src+=srcstride; | 25 src+=srcstride; |
14 srca+=srcstride; | 26 srca+=srcstride; |
15 dstbase+=dststride; | 27 dstbase+=dststride; |
16 } | 28 } |
17 return; | 29 return; |
18 } | 30 } |
19 | 31 |
20 void vo_draw_alpha_yuy2(int w,int h, unsigned char* src, unsigned char *srca, int srcstride, unsigned char* dstbase,int dststride){ | 32 void vo_draw_alpha_yuy2(int w,int h, unsigned char* src, unsigned char *srca, int srcstride, unsigned char* dstbase,int dststride){ |
21 int y; | 33 int y; |
34 #ifdef FAST_OSD | |
35 w=w>>1; | |
36 #endif | |
22 for(y=0;y<h;y++){ | 37 for(y=0;y<h;y++){ |
23 register int x; | 38 register int x; |
24 for(x=0;x<w;x++){ | 39 for(x=0;x<w;x++){ |
40 #ifdef FAST_OSD | |
41 if(srca[2*x+0]) dstbase[4*x+0]=src[2*x+0]; | |
42 if(srca[2*x+1]) dstbase[4*x+2]=src[2*x+1]; | |
43 #else | |
25 if(srca[x]) dstbase[2*x]=((dstbase[2*x]*srca[x])>>8)+src[x]; | 44 if(srca[x]) dstbase[2*x]=((dstbase[2*x]*srca[x])>>8)+src[x]; |
45 #endif | |
26 } | 46 } |
27 src+=srcstride; | 47 src+=srcstride; |
28 srca+=srcstride; | 48 srca+=srcstride; |
29 dstbase+=dststride; | 49 dstbase+=dststride; |
30 } | 50 } |
36 for(y=0;y<h;y++){ | 56 for(y=0;y<h;y++){ |
37 register unsigned char *dst = dstbase; | 57 register unsigned char *dst = dstbase; |
38 register int x; | 58 register int x; |
39 for(x=0;x<w;x++){ | 59 for(x=0;x<w;x++){ |
40 if(srca[x]){ | 60 if(srca[x]){ |
61 #ifdef FAST_OSD | |
62 dst[0]=dst[1]=dst[2]=src[x]; | |
63 #else | |
41 dst[0]=((dst[0]*srca[x])>>8)+src[x]; | 64 dst[0]=((dst[0]*srca[x])>>8)+src[x]; |
42 dst[1]=((dst[1]*srca[x])>>8)+src[x]; | 65 dst[1]=((dst[1]*srca[x])>>8)+src[x]; |
43 dst[2]=((dst[2]*srca[x])>>8)+src[x]; | 66 dst[2]=((dst[2]*srca[x])>>8)+src[x]; |
67 #endif | |
44 } | 68 } |
45 dst+=3; // 24bpp | 69 dst+=3; // 24bpp |
46 } | 70 } |
47 src+=srcstride; | 71 src+=srcstride; |
48 srca+=srcstride; | 72 srca+=srcstride; |
55 int y; | 79 int y; |
56 for(y=0;y<h;y++){ | 80 for(y=0;y<h;y++){ |
57 register int x; | 81 register int x; |
58 for(x=0;x<w;x++){ | 82 for(x=0;x<w;x++){ |
59 if(srca[x]){ | 83 if(srca[x]){ |
84 #ifdef FAST_OSD | |
85 dstbase[4*x+0]=dstbase[4*x+1]=dstbase[4*x+2]=src[x]; | |
86 #else | |
60 dstbase[4*x+0]=((dstbase[4*x+0]*srca[x])>>8)+src[x]; | 87 dstbase[4*x+0]=((dstbase[4*x+0]*srca[x])>>8)+src[x]; |
61 dstbase[4*x+1]=((dstbase[4*x+1]*srca[x])>>8)+src[x]; | 88 dstbase[4*x+1]=((dstbase[4*x+1]*srca[x])>>8)+src[x]; |
62 dstbase[4*x+2]=((dstbase[4*x+2]*srca[x])>>8)+src[x]; | 89 dstbase[4*x+2]=((dstbase[4*x+2]*srca[x])>>8)+src[x]; |
90 #endif | |
63 } | 91 } |
64 } | 92 } |
65 src+=srcstride; | 93 src+=srcstride; |
66 srca+=srcstride; | 94 srca+=srcstride; |
67 dstbase+=dststride; | 95 dstbase+=dststride; |
68 } | 96 } |
69 return; | 97 return; |
70 } | 98 } |
71 | 99 |
100 #ifdef FAST_OSD_TABLE | |
101 static unsigned short fast_osd_15bpp_table[256]; | |
102 static unsigned short fast_osd_16bpp_table[256]; | |
103 #endif | |
104 | |
105 void vo_draw_alpha_init(){ | |
106 #ifdef FAST_OSD_TABLE | |
107 int i; | |
108 for(i=0;i<256;i++){ | |
109 fast_osd_15bpp_table[i]=((i>>3)<<10)|((i>>3)<<5)|(i>>3); | |
110 fast_osd_16bpp_table[i]=((i>>3)<<11)|((i>>2)<<5)|(i>>3); | |
111 } | |
112 #endif | |
113 } | |
114 | |
72 void vo_draw_alpha_rgb15(int w,int h, unsigned char* src, unsigned char *srca, int srcstride, unsigned char* dstbase,int dststride){ | 115 void vo_draw_alpha_rgb15(int w,int h, unsigned char* src, unsigned char *srca, int srcstride, unsigned char* dstbase,int dststride){ |
73 int y; | 116 int y; |
74 for(y=0;y<h;y++){ | 117 for(y=0;y<h;y++){ |
75 register unsigned short *dst = (unsigned short*) dstbase; | 118 register unsigned short *dst = (unsigned short*) dstbase; |
76 register int x; | 119 register int x; |
77 for(x=0;x<w;x++){ | 120 for(x=0;x<w;x++){ |
78 if(srca[x]){ | 121 if(srca[x]){ |
122 #ifdef FAST_OSD | |
123 #ifdef FAST_OSD_TABLE | |
124 dst[x]=fast_osd_15bpp_table[src[x]]; | |
125 #else | |
126 register unsigned int a=src[x]>>3; | |
127 dst[x]=(a<<10)|(a<<5)|a; | |
128 #endif | |
129 #else | |
79 unsigned char r=dst[x]&0x1F; | 130 unsigned char r=dst[x]&0x1F; |
80 unsigned char g=(dst[x]>>5)&0x1F; | 131 unsigned char g=(dst[x]>>5)&0x1F; |
81 unsigned char b=(dst[x]>>10)&0x1F; | 132 unsigned char b=(dst[x]>>10)&0x1F; |
82 r=(((r*srca[x])>>5)+src[x])>>3; | 133 r=(((r*srca[x])>>5)+src[x])>>3; |
83 g=(((g*srca[x])>>5)+src[x])>>3; | 134 g=(((g*srca[x])>>5)+src[x])>>3; |
84 b=(((b*srca[x])>>5)+src[x])>>3; | 135 b=(((b*srca[x])>>5)+src[x])>>3; |
85 dst[x]=(b<<10)|(g<<5)|r; | 136 dst[x]=(b<<10)|(g<<5)|r; |
137 #endif | |
86 } | 138 } |
87 } | 139 } |
88 src+=srcstride; | 140 src+=srcstride; |
89 srca+=srcstride; | 141 srca+=srcstride; |
90 dstbase+=dststride; | 142 dstbase+=dststride; |
97 for(y=0;y<h;y++){ | 149 for(y=0;y<h;y++){ |
98 register unsigned short *dst = (unsigned short*) dstbase; | 150 register unsigned short *dst = (unsigned short*) dstbase; |
99 register int x; | 151 register int x; |
100 for(x=0;x<w;x++){ | 152 for(x=0;x<w;x++){ |
101 if(srca[x]){ | 153 if(srca[x]){ |
154 #ifdef FAST_OSD | |
155 #ifdef FAST_OSD_TABLE | |
156 dst[x]=fast_osd_16bpp_table[src[x]]; | |
157 #else | |
158 dst[x]=((src[x]>>3)<<11)|((src[x]>>2)<<5)|(src[x]>>3); | |
159 #endif | |
160 #else | |
102 unsigned char r=dst[x]&0x1F; | 161 unsigned char r=dst[x]&0x1F; |
103 unsigned char g=(dst[x]>>5)&0x3F; | 162 unsigned char g=(dst[x]>>5)&0x3F; |
104 unsigned char b=(dst[x]>>11)&0x1F; | 163 unsigned char b=(dst[x]>>11)&0x1F; |
105 r=(((r*srca[x])>>5)+src[x])>>3; | 164 r=(((r*srca[x])>>5)+src[x])>>3; |
106 g=(((g*srca[x])>>6)+src[x])>>2; | 165 g=(((g*srca[x])>>6)+src[x])>>2; |
107 b=(((b*srca[x])>>5)+src[x])>>3; | 166 b=(((b*srca[x])>>5)+src[x])>>3; |
108 dst[x]=(b<<11)|(g<<5)|r; | 167 dst[x]=(b<<11)|(g<<5)|r; |
168 #endif | |
109 } | 169 } |
110 } | 170 } |
111 src+=srcstride; | 171 src+=srcstride; |
112 srca+=srcstride; | 172 srca+=srcstride; |
113 dstbase+=dststride; | 173 dstbase+=dststride; |