summaryrefslogtreecommitdiffstats
path: root/libvo/sub.c
diff options
context:
space:
mode:
authorarpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-04-15 22:08:50 +0000
committerarpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-04-15 22:08:50 +0000
commit3fc73ead6667cdc96443954194f3b463ecda2a30 (patch)
treea098f822b1a9281dd378979fbd6b0fcffa4a637e /libvo/sub.c
parent6af0bfeb9383b433a11f526aa2d9de251d3f9d75 (diff)
downloadmpv-3fc73ead6667cdc96443954194f3b463ecda2a30.tar.bz2
mpv-3fc73ead6667cdc96443954194f3b463ecda2a30.tar.xz
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
Diffstat (limited to 'libvo/sub.c')
-rw-r--r--libvo/sub.c31
1 files changed, 25 insertions, 6 deletions
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;
}
}