Mercurial > mplayer.hg
comparison libvo/vo_xv.c @ 247:dd107cd7686d
OSD/SUB support
author | arpi_esp |
---|---|
date | Thu, 29 Mar 2001 15:32:42 +0000 |
parents | 80a7b40f201a |
children | 2dadc379a934 |
comparison
equal
deleted
inserted
replaced
246:5673f9146c54 | 247:dd107cd7686d |
---|---|
251 fprintf( stderr,"[xv-fs] dcx: %d dcy: %d dx: %d dy: %d dw: %d dh: %d\n",drwcX,drwcY,drwX,drwY,drwWidth,drwHeight ); | 251 fprintf( stderr,"[xv-fs] dcx: %d dcy: %d dx: %d dy: %d dw: %d dh: %d\n",drwcX,drwcY,drwX,drwY,drwWidth,drwHeight ); |
252 } | 252 } |
253 } | 253 } |
254 } | 254 } |
255 | 255 |
256 | |
257 static void draw_alpha(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride){ | |
258 int x,y; | |
259 | |
260 if (xv_format==IMGFMT_YV12){ | |
261 | |
262 for(y=0;y<h;y++){ | |
263 uint8_t *dst = xvimage[0]->data + image_width * (y+y0) + x0; | |
264 for(x=0;x<w;x++){ | |
265 // dst[x]=(dst[x]*srca[x]+src[x]*(srca[x]^255))>>8; | |
266 if(srca[x]) | |
267 dst[x]=(dst[x]*(srca[x]^255)+src[x]*(srca[x]))>>8; | |
268 } | |
269 src+=stride; | |
270 srca+=stride; | |
271 } | |
272 | |
273 } else { | |
274 | |
275 for(y=0;y<h;y++){ | |
276 uint8_t *dst = xvimage[0]->data + 2*(image_width * (y+y0) + x0); | |
277 for(x=0;x<w;x++){ | |
278 // dst[x]=(dst[x]*srca[x]+src[x]*(srca[x]^255))>>8; | |
279 if(srca[x]) | |
280 dst[2*x]=(dst[2*x]*(srca[x]^255)+src[x]*(srca[x]))>>8; | |
281 } | |
282 src+=stride; | |
283 srca+=stride; | |
284 } | |
285 | |
286 } | |
287 | |
288 } | |
289 | |
256 static void flip_page(void) | 290 static void flip_page(void) |
257 { | 291 { |
292 vo_draw_text(image_width,image_height,draw_alpha); | |
258 check_events(); | 293 check_events(); |
259 XvShmPutImage(mydisplay, xv_port, mywindow, mygc, xvimage[0], | 294 XvShmPutImage(mydisplay, xv_port, mywindow, mygc, xvimage[0], |
260 0, 0, image_width, image_height, | 295 0, 0, image_width, image_height, |
261 drwX,drwY,drwWidth,(mFullscreen?drwHeight - 1:drwHeight), | 296 drwX,drwY,drwWidth,(mFullscreen?drwHeight - 1:drwHeight), |
262 False); | 297 False); |
263 XFlush(mydisplay); | 298 XFlush(mydisplay); |
264 return; | 299 return; |
265 } | 300 } |
301 | |
302 | |
266 | 303 |
267 static uint32_t draw_slice(uint8_t *image[], int stride[], int w,int h,int x,int y) | 304 static uint32_t draw_slice(uint8_t *image[], int stride[], int w,int h,int x,int y) |
268 { | 305 { |
269 uint8_t *src; | 306 uint8_t *src; |
270 uint8_t *dst; | 307 uint8_t *dst; |