summaryrefslogtreecommitdiffstats
path: root/libvo
diff options
context:
space:
mode:
authoratmos4 <atmos4@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-05-25 17:40:40 +0000
committeratmos4 <atmos4@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-05-25 17:40:40 +0000
commit73a97eb400ad7eebef28ed9f3349d5107954b11f (patch)
tree8289e05cc639a1923340b4e10084d72ea645600b /libvo
parent76c15cc6cdf728de56c2fbac182d62ae4849fe15 (diff)
downloadmpv-73a97eb400ad7eebef28ed9f3349d5107954b11f.tar.bz2
mpv-73a97eb400ad7eebef28ed9f3349d5107954b11f.tar.xz
Bounding box and partial update patch for vob/dvdsub by Hephooey.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@6191 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libvo')
-rw-r--r--libvo/sub.c22
1 files changed, 20 insertions, 2 deletions
diff --git a/libvo/sub.c b/libvo/sub.c
index 5e44238121..664f9f2cde 100644
--- a/libvo/sub.c
+++ b/libvo/sub.c
@@ -320,6 +320,22 @@ inline static void vo_update_text_sub(mp_osd_obj_t* obj,int dxs,int dys){
}
+inline static void vo_update_spudec_sub(mp_osd_obj_t* obj, int dxs, int dys)
+{
+ unsigned int bbox[4];
+ int i;
+ spudec_calc_bbox(vo_spudec, dxs, dys, bbox);
+ obj->bbox.x1 = bbox[0];
+ obj->bbox.x2 = bbox[1];
+ obj->bbox.y1 = bbox[2];
+ obj->bbox.y2 = bbox[3];
+ obj->flags |= OSDFLAG_BBOX;
+}
+
+inline static void vo_draw_spudec_sub(mp_osd_obj_t* obj, void (*draw_alpha)(int x0, int y0, int w, int h, unsigned char* src, unsigned char* srca, int stride))
+{
+ spudec_draw_scaled(vo_spudec, obj->dxs, obj->dys, draw_alpha);
+}
inline static void vo_draw_text_sub(mp_osd_obj_t* obj,void (*draw_alpha)(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride)){
int i,j,c,x,l,font;
int y=obj->y;
@@ -385,8 +401,10 @@ int vo_update_osd(int dxs,int dys){
vo_update_text_progbar(obj,dxs,dys);
break;
case OSDTYPE_SPU:
- if(vo_spudec && spudec_visible(vo_spudec))
+ if(vo_spudec && spudec_visible(vo_spudec)){
+ vo_update_spudec_sub(obj, dxs, dys);
obj->flags|=OSDFLAG_VISIBLE|OSDFLAG_CHANGED;
+ }
else
obj->flags&=~OSDFLAG_VISIBLE;
break;
@@ -473,7 +491,7 @@ void vo_draw_text(int dxs,int dys,void (*draw_alpha)(int x0,int y0, int w,int h,
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
+ vo_draw_spudec_sub(obj, draw_alpha); // FIXME
break;
case OSDTYPE_OSD:
vo_draw_text_osd(obj,draw_alpha);