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