vlc_value_t oldval, vlc_value_t newval,
void * p_userdata );
static int
+input_seekable_changed( vlc_object_t * p_this, char const * psz_cmd,
+ vlc_value_t oldval, vlc_value_t newval,
+ void * p_userdata );
+static int
+input_pausable_changed( vlc_object_t * p_this, char const * psz_cmd,
+ vlc_value_t oldval, vlc_value_t newval,
+ void * p_userdata );
+static int
input_position_changed( vlc_object_t * p_this, char const * psz_cmd,
vlc_value_t oldval, vlc_value_t newval,
void * p_userdata );
if( p_mi->b_own_its_input_thread )
{
var_DelCallback( p_input_thread, "state", input_state_changed, p_mi );
- var_DelCallback( p_input_thread, "seekable", input_state_changed, p_mi );
- var_DelCallback( p_input_thread, "pausable", input_state_changed, p_mi );
+ var_DelCallback( p_input_thread, "seekable", input_seekable_changed, p_mi );
+ var_DelCallback( p_input_thread, "pausable", input_pausable_changed, p_mi );
var_DelCallback( p_input_thread, "intf-change", input_position_changed, p_mi );
var_DelCallback( p_input_thread, "intf-change", input_time_changed, p_mi );
{
input_thread_t *p_input_thread;
+ if ( !p_mi )
+ {
+ RAISENULL( "Input is NULL" );
+ }
+
vlc_mutex_lock( &p_mi->object_lock );
if( !p_mi || p_mi->i_input_id == -1 )
void * p_userdata )
{
VLC_UNUSED(oldval);
+ VLC_UNUSED(p_this);
+ VLC_UNUSED(psz_cmd);
libvlc_media_instance_t * p_mi = p_userdata;
libvlc_event_t event;
libvlc_event_type_t type = newval.i_int;
- if( strcmp( psz_cmd, "state" ) )
- type = var_GetInteger( p_this, "state" );
-
switch ( type )
{
case END_S:
return VLC_SUCCESS;
}
+static int
+input_seekable_changed( vlc_object_t * p_this, char const * psz_cmd,
+ vlc_value_t oldval, vlc_value_t newval,
+ void * p_userdata )
+{
+ VLC_UNUSED(oldval);
+ VLC_UNUSED(p_this);
+ VLC_UNUSED(psz_cmd);
+ libvlc_media_instance_t * p_mi = p_userdata;
+ libvlc_event_t event;
+
+ libvlc_media_descriptor_set_state( p_mi->p_md, libvlc_NothingSpecial, NULL);
+ event.type = libvlc_MediaInstanceSeekableChanged;
+ event.u.media_instance_seekable_changed.new_seekable = newval.b_bool;
+
+ libvlc_event_send( p_mi->p_event_manager, &event );
+ return VLC_SUCCESS;
+}
+
+static int
+input_pausable_changed( vlc_object_t * p_this, char const * psz_cmd,
+ vlc_value_t oldval, vlc_value_t newval,
+ void * p_userdata )
+{
+ VLC_UNUSED(oldval);
+ VLC_UNUSED(p_this);
+ VLC_UNUSED(psz_cmd);
+ libvlc_media_instance_t * p_mi = p_userdata;
+ libvlc_event_t event;
+
+ libvlc_media_descriptor_set_state( p_mi->p_md, libvlc_NothingSpecial, NULL);
+ event.type = libvlc_MediaInstancePausableChanged;
+ event.u.media_instance_pausable_changed.new_pausable = newval.b_bool;
+
+ libvlc_event_send( p_mi->p_event_manager, &event );
+ return VLC_SUCCESS;
+}
+
/*
* input_position_changed (Private) (input var "intf-change" Callback)
*/
libvlc_MediaInstancePositionChanged, p_e );
libvlc_event_manager_register_event_type( p_mi->p_event_manager,
libvlc_MediaInstanceTimeChanged, p_e );
+ libvlc_event_manager_register_event_type( p_mi->p_event_manager,
+ libvlc_MediaInstanceSeekableChanged, p_e );
+ libvlc_event_manager_register_event_type( p_mi->p_event_manager,
+ libvlc_MediaInstancePausableChanged, p_e );
return p_mi;
}
var_Set( p_input_thread, "drawable", val );
}
var_AddCallback( p_input_thread, "state", input_state_changed, p_mi );
- var_AddCallback( p_input_thread, "seekable", input_state_changed, p_mi );
- var_AddCallback( p_input_thread, "pausable", input_state_changed, p_mi );
+ var_AddCallback( p_input_thread, "seekable", input_seekable_changed, p_mi );
+ var_AddCallback( p_input_thread, "pausable", input_pausable_changed, p_mi );
var_AddCallback( p_input_thread, "intf-change", input_position_changed, p_mi );
var_AddCallback( p_input_thread, "intf-change", input_time_changed, p_mi );