Mercurial > mplayer.hg
comparison libvo/sub.c @ 5642:eb0cb6185e6c
osd: ok, now it's possible to do partial draw/clear of the buffer only if changed
author | arpi |
---|---|
date | Mon, 15 Apr 2002 22:08:50 +0000 |
parents | a0cee3bb7f78 |
children | bd5c0d8346f0 |
comparison
equal
deleted
inserted
replaced
5641:85df37cde3d3 | 5642:eb0cb6185e6c |
---|---|
425 new_osd_obj(OSDTYPE_PROGBAR); | 425 new_osd_obj(OSDTYPE_PROGBAR); |
426 new_osd_obj(OSDTYPE_SPU); | 426 new_osd_obj(OSDTYPE_SPU); |
427 new_osd_obj(OSDTYPE_VOBSUB); | 427 new_osd_obj(OSDTYPE_VOBSUB); |
428 } | 428 } |
429 | 429 |
430 int vo_osd_changed_flag=0; | |
431 | |
432 void vo_remove_text(int dxs,int dys,void (*remove)(int x0,int y0, int w,int h)){ | |
433 mp_osd_obj_t* obj=vo_osd_list; | |
434 vo_update_osd(dxs,dys); | |
435 while(obj){ | |
436 if(((obj->flags&OSDFLAG_CHANGED) || (obj->flags&OSDFLAG_VISIBLE)) && | |
437 (obj->flags&OSDFLAG_OLD_BBOX)){ | |
438 int w=obj->old_bbox.x2-obj->old_bbox.x1; | |
439 int h=obj->old_bbox.y2-obj->old_bbox.y1; | |
440 if(w>0 && h>0){ | |
441 vo_osd_changed_flag=obj->flags&OSDFLAG_CHANGED; // temp hack | |
442 remove(obj->old_bbox.x1,obj->old_bbox.y1,w,h); | |
443 } | |
444 // obj->flags&=~OSDFLAG_OLD_BBOX; | |
445 } | |
446 } | |
447 } | |
448 | |
430 void vo_draw_text(int dxs,int dys,void (*draw_alpha)(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride)){ | 449 void vo_draw_text(int dxs,int dys,void (*draw_alpha)(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride)){ |
431 mp_osd_obj_t* obj=vo_osd_list; | 450 mp_osd_obj_t* obj=vo_osd_list; |
432 | |
433 vo_update_osd(dxs,dys); | 451 vo_update_osd(dxs,dys); |
434 | |
435 while(obj){ | 452 while(obj){ |
436 if(obj->flags&OSDFLAG_VISIBLE) | 453 if(obj->flags&OSDFLAG_VISIBLE){ |
454 vo_osd_changed_flag=obj->flags&OSDFLAG_CHANGED; // temp hack | |
437 switch(obj->type){ | 455 switch(obj->type){ |
438 case OSDTYPE_SPU: | 456 case OSDTYPE_SPU: |
439 spudec_draw_scaled(vo_spudec, dxs, dys, draw_alpha); // FIXME | 457 spudec_draw_scaled(vo_spudec, dxs, dys, draw_alpha); // FIXME |
440 break; | 458 break; |
441 case OSDTYPE_VOBSUB: | 459 case OSDTYPE_VOBSUB: |
450 case OSDTYPE_PROGBAR: | 468 case OSDTYPE_PROGBAR: |
451 vo_draw_text_progbar(obj,draw_alpha); | 469 vo_draw_text_progbar(obj,draw_alpha); |
452 break; | 470 break; |
453 } | 471 } |
454 obj->old_bbox=obj->bbox; | 472 obj->old_bbox=obj->bbox; |
455 obj->flags&=~OSDFLAG_CHANGED; | 473 obj->flags|=OSDFLAG_OLD_BBOX; |
456 | 474 } |
457 obj=obj->next; | 475 obj->flags&=~OSDFLAG_CHANGED; |
476 obj=obj->next; | |
458 } | 477 } |
459 } | 478 } |
460 | 479 |
461 static int vo_osd_changed_status = 0; | 480 static int vo_osd_changed_status = 0; |
462 | 481 |