better nav highlight handling

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@21216 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
ben 2006-11-25 13:03:51 +00:00
parent f313243ca1
commit 42eecb4f1b
4 changed files with 28 additions and 12 deletions

View File

@ -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 @@ inline static void vo_update_text_osd(mp_osd_obj_t* obj,int dxs,int dys){
#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);

View File

@ -183,6 +183,10 @@ static int max_framesize=0;
#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 @@ if(auto_quality>0){
#ifdef USE_DVDNAV
if (stream->type == STREAMTYPE_DVDNAV) {
extern int dvd_nav_hl_on;
nav_highlight_t hl;
if (dvd_nav_hl_on)
mp_dvdnav_get_highlight (&hl);
if (hl.sx != 0 && hl.sy != 0) /* highlighting on */
vo_osd_changed (OSDTYPE_DVDNAV);
}
#endif

View File

@ -46,8 +46,7 @@ static struct m_struct_st stream_opts = {
};
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 @@ static void dvdnav_get_highlight (dvdnav_priv_t *priv, dvdnav_highlight_event_t
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 @@ static void dvdnav_get_highlight (dvdnav_priv_t *priv, dvdnav_highlight_event_t
hlev->sx = hlev->ex = 0;
hlev->sy = hlev->ey = 0;
hlev->palette = hlev->buttonN = 0;
dvd_nav_hl_on = 0;
}
}
@ -494,6 +491,12 @@ int dvdnav_number_of_subs(stream_t *stream) {
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",

View File

@ -9,6 +9,11 @@ typedef struct {
int len; /* bytes in details */
} 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 */
@ -26,5 +31,6 @@ int dvdnav_number_of_subs(stream_t *stream);
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