X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Faccess%2Fdvdnav.c;h=99644665da29c6d53c01fabd7ad39439675e5c00;hb=de587c237065de4696d9d035d0504cdf34990d87;hp=48ea51300623ba6bfd6dce9222494712446602f4;hpb=562773d60e1775780f5fb301670b8d515f0612d3;p=vlc diff --git a/modules/access/dvdnav.c b/modules/access/dvdnav.c index 48ea513006..99644665da 100644 --- a/modules/access/dvdnav.c +++ b/modules/access/dvdnav.c @@ -29,7 +29,7 @@ # include "config.h" #endif -#include +#include #include #include #include @@ -929,6 +929,7 @@ static void ButtonUpdate( demux_t *p_demux, bool b_mode ) vlc_mutex_t *p_mutex = val.p_address; dvdnav_highlight_area_t hl; int32_t i_button; + bool b_button_ok; if( dvdnav_get_current_highlight( p_sys->dvdnav, &i_button ) != DVDNAV_STATUS_OK ) @@ -937,18 +938,20 @@ static void ButtonUpdate( demux_t *p_demux, bool b_mode ) return; } + b_button_ok = false; if( i_button > 0 && i_title == 0 ) { - int i; pci_t *pci = dvdnav_get_current_nav_pci( p_sys->dvdnav ); - dvdnav_get_highlight_area( pci, i_button, b_mode, &hl ); - + b_button_ok = dvdnav_get_highlight_area( pci, i_button, b_mode, &hl ) == DVDNAV_STATUS_OK; + } + if( b_button_ok ) + { + int i; for( i = 0; i < 4; i++ ) { uint32_t i_yuv = p_sys->clut[(hl.palette>>(16+i*4))&0x0f]; - uint8_t i_alpha = (hl.palette>>(i*4))&0x0f; - i_alpha = i_alpha == 0xf ? 0xff : i_alpha << 4; + uint8_t i_alpha = ( (hl.palette>>(i*4))&0x0f ) * 0xff / 0xf; p_sys->palette[i][0] = (i_yuv >> 16) & 0xff; p_sys->palette[i][1] = (i_yuv >> 0) & 0xff; @@ -1234,7 +1237,7 @@ static int EventThread( vlc_object_t *p_this ) var_AddCallback( p_ev->p_libvlc, "key-action", EventKey, p_ev ); /* main loop */ - while( !p_ev->b_die ) + while( vlc_object_alive (p_ev) ) { bool b_activated = false; @@ -1243,9 +1246,6 @@ static int EventThread( vlc_object_t *p_this ) { pci_t *pci = dvdnav_get_current_nav_pci( p_sys->dvdnav ); - vlc_value_t valk; - int i; - vlc_mutex_lock( &p_ev->lock ); switch( p_ev->i_key_action ) { @@ -1300,7 +1300,7 @@ static int EventThread( vlc_object_t *p_this ) p_ev->b_clicked = false; vlc_mutex_unlock( &p_ev->lock ); } - if( p_vout && p_vout->b_die ) + if( p_vout && !vlc_object_alive (p_vout) ) { var_DelCallback( p_vout, "mouse-moved", EventMouse, p_ev ); var_DelCallback( p_vout, "mouse-clicked", EventMouse, p_ev );