changeset 21200:c7b5dd2b2291

better nav highlight handling
author ben
date Sat, 25 Nov 2006 13:03:51 +0000
parents 92977b0a5515
children 2c1b7fe05973
files libvo/sub.c mplayer.c stream/stream_dvdnav.c stream/stream_dvdnav.h
diffstat 4 files changed, 29 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/libvo/sub.c	Sat Nov 25 12:37:47 2006 +0000
+++ b/libvo/sub.c	Sat Nov 25 13:03:51 2006 +0000
@@ -9,7 +9,8 @@
 #endif
 
 #ifdef USE_DVDNAV
-#include <dvdnav.h>
+#include "stream/stream.h"
+#include "stream/stream_dvdnav.h"
 #define OSD_NAV_BOX_ALPHA 0x7f
 #endif
 
@@ -199,13 +200,14 @@
 
 #ifdef USE_DVDNAV
 inline static void vo_update_nav (mp_osd_obj_t *obj, int dxs, int dys) {
-  extern dvdnav_highlight_event_t dvd_nav_hl;
+  nav_highlight_t hl;
   int len;
 
-  obj->bbox.x1 = obj->x = dvd_nav_hl.sx;
-  obj->bbox.y1 = obj->y = dvd_nav_hl.sy;
-  obj->bbox.x2 = dvd_nav_hl.ex;
-  obj->bbox.y2 = dvd_nav_hl.ey;
+  mp_dvdnav_get_highlight (&hl);
+  obj->bbox.x1 = obj->x = hl.sx;
+  obj->bbox.y1 = obj->y = hl.sy;
+  obj->bbox.x2 = hl.ex;
+  obj->bbox.y2 = hl.ey;
   
   alloc_buf (obj);
   len = obj->stride * (obj->bbox.y2 - obj->bbox.y1);
--- a/mplayer.c	Sat Nov 25 12:37:47 2006 +0000
+++ b/mplayer.c	Sat Nov 25 13:03:51 2006 +0000
@@ -183,6 +183,10 @@
 #include "stream/stream_dvd.h"
 #endif
 
+#ifdef USE_DVDNAV
+#include "stream/stream_dvdnav.h"
+#endif
+
 #include "libmpcodecs/dec_audio.h"
 #include "libmpcodecs/dec_video.h"
 #include "libmpcodecs/mp_image.h"
@@ -4698,9 +4702,10 @@
 
 #ifdef USE_DVDNAV
  if (stream->type == STREAMTYPE_DVDNAV) {
-   extern int dvd_nav_hl_on;
-
-   if (dvd_nav_hl_on)
+   nav_highlight_t hl;
+
+   mp_dvdnav_get_highlight (&hl);
+   if (hl.sx != 0 && hl.sy != 0) /* highlighting on */
      vo_osd_changed (OSDTYPE_DVDNAV);
  }
 #endif
--- a/stream/stream_dvdnav.c	Sat Nov 25 12:37:47 2006 +0000
+++ b/stream/stream_dvdnav.c	Sat Nov 25 13:03:51 2006 +0000
@@ -46,8 +46,7 @@
 };
 
 int dvd_nav_still=0;            /* are we on a still picture? */
-dvdnav_highlight_event_t dvd_nav_hl;
-int dvd_nav_hl_on = 0;
+static dvdnav_highlight_event_t dvd_nav_hl;
 
 static int seek(stream_t *s, off_t newpos);
 
@@ -129,7 +128,6 @@
 
         hlev->palette = (btni->btn_coln == 0) ? 0 :
           pnavpci->hli.btn_colit.btn_coli[btni->btn_coln - 1][0];
-        dvd_nav_hl_on = 1;
         break;
       }
     }
@@ -137,7 +135,6 @@
     hlev->sx = hlev->ex = 0;
     hlev->sy = hlev->ey = 0;
     hlev->palette = hlev->buttonN = 0;
-    dvd_nav_hl_on = 0;
   }
 }
 
@@ -494,6 +491,12 @@
   return n;
 }
 
+void mp_dvdnav_get_highlight (nav_highlight_t *hl) {
+  hl->sx = dvd_nav_hl.sx;
+  hl->sy = dvd_nav_hl.sy;
+  hl->ex = dvd_nav_hl.ex;
+  hl->ey = dvd_nav_hl.ey;
+}
 
 stream_info_t stream_info_dvdnav = {
   "DVDNAV stream",
--- a/stream/stream_dvdnav.h	Sat Nov 25 12:37:47 2006 +0000
+++ b/stream/stream_dvdnav.h	Sat Nov 25 13:03:51 2006 +0000
@@ -10,6 +10,11 @@
 } dvdnav_event_t;
 
 typedef struct {
+  uint16_t sx, sy;
+  uint16_t ex, ey;
+} nav_highlight_t;
+
+typedef struct {
   dvdnav_t *       dvdnav;              /* handle to libdvdnav stuff */
   char *           filename;            /* path */
   int              ignore_timers;       /* should timers be skipped? */
@@ -26,5 +31,6 @@
 int dvdnav_sid_from_lang(stream_t *stream, unsigned char *language);
 int mp_dvdnav_handle_input(stream_t *stream, int cmd, int *button);
 void mp_dvdnav_update_mouse_pos(stream_t *stream, int32_t x, int32_t y, int* button);
+void mp_dvdnav_get_highlight (nav_highlight_t *hl);
 
 #endif