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;