Commit 05406780 authored by Laurent Aimar's avatar Laurent Aimar

Check for dvdnav_get_highlight_area error.

parent 418410c4
...@@ -929,6 +929,7 @@ static void ButtonUpdate( demux_t *p_demux, bool b_mode ) ...@@ -929,6 +929,7 @@ static void ButtonUpdate( demux_t *p_demux, bool b_mode )
vlc_mutex_t *p_mutex = val.p_address; vlc_mutex_t *p_mutex = val.p_address;
dvdnav_highlight_area_t hl; dvdnav_highlight_area_t hl;
int32_t i_button; int32_t i_button;
bool b_button_ok;
if( dvdnav_get_current_highlight( p_sys->dvdnav, &i_button ) if( dvdnav_get_current_highlight( p_sys->dvdnav, &i_button )
!= DVDNAV_STATUS_OK ) != DVDNAV_STATUS_OK )
...@@ -937,18 +938,20 @@ static void ButtonUpdate( demux_t *p_demux, bool b_mode ) ...@@ -937,18 +938,20 @@ static void ButtonUpdate( demux_t *p_demux, bool b_mode )
return; return;
} }
b_button_ok = false;
if( i_button > 0 && i_title == 0 ) if( i_button > 0 && i_title == 0 )
{ {
int i;
pci_t *pci = dvdnav_get_current_nav_pci( p_sys->dvdnav ); 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++ ) for( i = 0; i < 4; i++ )
{ {
uint32_t i_yuv = p_sys->clut[(hl.palette>>(16+i*4))&0x0f]; uint32_t i_yuv = p_sys->clut[(hl.palette>>(16+i*4))&0x0f];
uint8_t i_alpha = (hl.palette>>(i*4))&0x0f; uint8_t i_alpha = ( (hl.palette>>(i*4))&0x0f ) * 0xff / 0xf;
i_alpha = i_alpha == 0xf ? 0xff : i_alpha << 4;
p_sys->palette[i][0] = (i_yuv >> 16) & 0xff; p_sys->palette[i][0] = (i_yuv >> 16) & 0xff;
p_sys->palette[i][1] = (i_yuv >> 0) & 0xff; p_sys->palette[i][1] = (i_yuv >> 0) & 0xff;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment