,p_input(NULL)
,i_curr_button(0)
,p_ev(NULL)
- {}
+ {
+ vlc_mutex_init( &demuxer, &lock_demuxer );
+ }
virtual ~demux_sys_t()
{
delete opened_segments[i];
for ( i=0; i<used_segments.size(); i++ )
delete used_segments[i];
+ vlc_mutex_destroy( &lock_demuxer );
}
/* current data */
pci_t pci_packet;
int16 i_curr_button;
uint8_t alpha[4];
+ vlc_mutex_t lock_demuxer;
/* event */
event_thread_t *p_ev;
/* Now create our event thread catcher */
p_ev = (event_thread_t *) vlc_object_create( &demuxer, sizeof( event_thread_t ) );
p_ev->p_demux = &demuxer;
- p_ev->b_die = VLC_FALSE;
+ p_ev->b_die = VLC_FALSE;
vlc_mutex_init( p_ev, &p_ev->lock );
vlc_thread_create( p_ev, "mkv event thread handler", EventThread,
VLC_THREAD_PRIORITY_LOW, VLC_FALSE );
vlc_mutex_unlock( &p_ev->lock );
}
- /* VOUT part */
+ /* MOUSE part */
if( p_vout && ( p_ev->b_moved || p_ev->b_clicked ) )
{
vlc_value_t valx, valy;
var_Get( p_vout, "mouse-x", &valx );
var_Get( p_vout, "mouse-y", &valy );
- if( p_ev->b_moved )
- {
-// dvdnav_mouse_select( NULL, pci, valx.i_int, valy.i_int );
- p_ev->b_moved = 0;
- }
if( p_ev->b_clicked )
{
int32_t button;
if ( best != 0)
{
- btni_t *button_ptr = &(pci->hli.btnit[best-1]);
+ btni_t button_ptr = pci->hli.btnit[best-1];
msg_Dbg( &p_sys->demuxer, "Clicked button %d", best );
+ vlc_mutex_unlock( &p_ev->lock );
+ vlc_mutex_lock( &p_sys->lock_demuxer );
// process the button action
p_sys->dvd_interpretor.SetSPRM( 0x88, best );
- p_sys->dvd_interpretor.Interpret( button_ptr->cmd.bytes, 8 );
+ p_sys->dvd_interpretor.Interpret( button_ptr.cmd.bytes, 8 );
// select new button
if ( best != p_sys->i_curr_button )
if( var_Get( p_sys->p_input, "highlight-mutex", &val ) == VLC_SUCCESS )
{
vlc_mutex_t *p_mutex = (vlc_mutex_t *) val.p_address;
- btni_t *button_ptr = &(pci->hli.btnit[best-1]);
uint32_t i_palette;
- if(button_ptr->btn_coln != 0) {
- i_palette = pci->hli.btn_colit.btn_coli[button_ptr->btn_coln-1][1];
+ if(button_ptr.btn_coln != 0) {
+ i_palette = pci->hli.btn_colit.btn_coli[button_ptr.btn_coln-1][1];
} else {
i_palette = 0;
}
p_sys->alpha[3] = (i_palette>>12)& 0x0f;
vlc_mutex_lock( p_mutex );
- val.i_int = button_ptr->x_start; var_Set( p_sys->p_input, "x-start", val );
- val.i_int = button_ptr->x_end; var_Set( p_sys->p_input, "x-end", val );
- val.i_int = button_ptr->y_start; var_Set( p_sys->p_input, "y-start", val );
- val.i_int = button_ptr->y_end; var_Set( p_sys->p_input, "y-end", val );
+ val.i_int = button_ptr.x_start; var_Set( p_sys->p_input, "x-start", val );
+ val.i_int = button_ptr.x_end; var_Set( p_sys->p_input, "x-end", val );
+ val.i_int = button_ptr.y_start; var_Set( p_sys->p_input, "y-start", val );
+ val.i_int = button_ptr.y_end; var_Set( p_sys->p_input, "y-end", val );
val.p_address = (void *)p_sys->alpha;
var_Set( p_sys->p_input, "menu-contrast", val );
p_sys->i_curr_button = best;
}
}
+ vlc_mutex_unlock( &p_sys->lock_demuxer );
+ vlc_mutex_lock( &p_ev->lock );
}
}
+ else if( p_ev->b_moved )
+ {
+// dvdnav_mouse_select( NULL, pci, valx.i_int, valy.i_int );
+ }
p_ev->b_moved = VLC_FALSE;
p_ev->b_clicked = VLC_FALSE;
vlc_mutex_unlock( &p_ev->lock );
}
+ /* VOUT part */
if( p_vout && p_vout->b_die )
{
var_DelCallback( p_vout, "mouse-moved", EventMouse, p_ev );
int64_t i_block_ref1;
int64_t i_block_ref2;
+ vlc_mutex_lock( &p_sys->lock_demuxer );
+
for( ;; )
{
if ( p_sys->demuxer.b_die )
}
}
+ vlc_mutex_unlock( &p_sys->lock_demuxer );
+
return i_return;
}