From 3fc73ead6667cdc96443954194f3b463ecda2a30 Mon Sep 17 00:00:00 2001 From: arpi Date: Mon, 15 Apr 2002 22:08:50 +0000 Subject: osd: ok, now it's possible to do partial draw/clear of the buffer only if changed git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@5643 b3059339-0415-0410-9bf9-f77b7e298cf2 --- libvo/sub.c | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) (limited to 'libvo/sub.c') diff --git a/libvo/sub.c b/libvo/sub.c index c8a407f60a..d5a431a67b 100644 --- a/libvo/sub.c +++ b/libvo/sub.c @@ -427,13 +427,31 @@ void vo_init_osd(){ new_osd_obj(OSDTYPE_VOBSUB); } -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)){ - mp_osd_obj_t* obj=vo_osd_list; +int vo_osd_changed_flag=0; +void vo_remove_text(int dxs,int dys,void (*remove)(int x0,int y0, int w,int h)){ + mp_osd_obj_t* obj=vo_osd_list; vo_update_osd(dxs,dys); + while(obj){ + if(((obj->flags&OSDFLAG_CHANGED) || (obj->flags&OSDFLAG_VISIBLE)) && + (obj->flags&OSDFLAG_OLD_BBOX)){ + int w=obj->old_bbox.x2-obj->old_bbox.x1; + int h=obj->old_bbox.y2-obj->old_bbox.y1; + if(w>0 && h>0){ + vo_osd_changed_flag=obj->flags&OSDFLAG_CHANGED; // temp hack + remove(obj->old_bbox.x1,obj->old_bbox.y1,w,h); + } +// obj->flags&=~OSDFLAG_OLD_BBOX; + } + } +} +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)){ + mp_osd_obj_t* obj=vo_osd_list; + vo_update_osd(dxs,dys); while(obj){ - if(obj->flags&OSDFLAG_VISIBLE) + if(obj->flags&OSDFLAG_VISIBLE){ + vo_osd_changed_flag=obj->flags&OSDFLAG_CHANGED; // temp hack switch(obj->type){ case OSDTYPE_SPU: spudec_draw_scaled(vo_spudec, dxs, dys, draw_alpha); // FIXME @@ -452,9 +470,10 @@ void vo_draw_text(int dxs,int dys,void (*draw_alpha)(int x0,int y0, int w,int h, break; } obj->old_bbox=obj->bbox; - obj->flags&=~OSDFLAG_CHANGED; - - obj=obj->next; + obj->flags|=OSDFLAG_OLD_BBOX; + } + obj->flags&=~OSDFLAG_CHANGED; + obj=obj->next; } } -- cgit v1.2.3