libvlc_MediaDescriptorMetaChanged,
libvlc_MediaDescriptorSubItemAdded,
+ libvlc_MediaInstancePlayed,
+ libvlc_MediaInstancePaused,
libvlc_MediaInstanceReachedEnd,
-
+ libvlc_MediaInstancePositionChanged,
+
libvlc_MediaListItemAdded,
libvlc_MediaListItemDeleted,
libvlc_MediaListItemChanged,
+ libvlc_MediaListPlayerPlayed,
+ libvlc_MediaListPlayerNextItemSet,
+ libvlc_MediaListPlayerStopped,
+
libvlc_TreeSubtreeAdded,
libvlc_TreeSubtreeDeleted,
libvlc_TreeItemValueChanged,
libvlc_media_descriptor_t * new_child;
} media_descriptor_subitem_added;
+ /* media instance */
+ struct
+ {
+ uint64_t new_position;
+ } media_instance_position_changed;
+
/* media list */
struct
{
case END_S:
event.type = libvlc_MediaInstanceReachedEnd;
break;
+ case PAUSE_S:
+ event.type = libvlc_MediaInstancePaused;
+ break;
+ case PLAYING_S:
+ event.type = libvlc_MediaInstancePlayed;
+ break;
default:
return VLC_SUCCESS;
}
return VLC_SUCCESS;
}
+/*
+ * input_position_changed (Private) (input var "intf-change" Callback)
+ */
+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 )
+{
+ libvlc_media_instance_t * p_mi = p_userdata;
+ vlc_value_t val;
+
+ if (!strcmp(psz_cmd, "intf" /* "-change" no need to go further */))
+ {
+ input_thread_t * p_input = (input_thread_t *)p_this;
+ var_Get( p_input, "position", &val );
+
+ if ((val.i_time % I64C(500000)) != 0)
+ return VLC_SUCCESS; /* No need to have a better precision */
+ var_Get( p_input, "state", &val );
+
+ if( val.i_int != PLAYING_S )
+ return VLC_SUCCESS; /* Don't send the position while stopped */
+ }
+ else
+ val.i_time = newval.i_time;
+
+ libvlc_event_t event;
+ event.type = libvlc_MediaInstancePositionChanged;
+ event.u.media_instance_position_changed.new_position = val.i_time;
+
+ libvlc_event_send( p_mi->p_event_manager, &event );
+ return VLC_SUCCESS;
+}
+
/**************************************************************************
* Create a Media Instance object
**************************************************************************/
var_Set( p_input_thread, "drawable", val );
}
var_AddCallback( p_input_thread, "state", input_state_changed, p_mi );
+ var_AddCallback( p_input_thread, "intf-change", input_position_changed, p_mi );
/* will be released in media_instance_release() */
vlc_object_yield( p_input_thread );
libvlc_MediaInstanceReachedEnd,
media_instance_reached_end, p_mlp, NULL );
}
+
/**************************************************************************
* Stop (Public)
**************************************************************************/
*/
/**************************************************************************
- * libvlc_media_list_player_new (Public)
+ * new (Public)
**************************************************************************/
libvlc_media_list_player_t *
libvlc_media_list_player_new( libvlc_instance_t * p_instance,
p_mlp->p_mi = NULL;
p_mlp->p_mlist = NULL;
vlc_mutex_init( p_instance->p_libvlc_int, &p_mlp->object_lock );
-
+ p_mlp->p_event_manager = libvlc_event_manager_new( p_mlp,
+ p_instance,
+ p_e );
+ libvlc_event_manager_register_event_type( p_mlp->p_event_manager,
+ libvlc_MediaListPlayerNextItemSet, p_e );
+ libvlc_event_manager_register_event_type( p_mlp->p_event_manager,
+ libvlc_MediaListPlayerNextItemSet, p_e );
+
return p_mlp;
}
/**************************************************************************
- * libvlc_media_list_player_release (Public)
+ * release (Public)
**************************************************************************/
void libvlc_media_list_player_release( libvlc_media_list_player_t * p_mlp )
{
}
/**************************************************************************
- * libvlc_media_list_player_set_media_instance (Public)
+ * set_media_instance (Public)
**************************************************************************/
void libvlc_media_list_player_set_media_instance(
libvlc_media_list_player_t * p_mlp,
}
/**************************************************************************
- * Set a playlist (Public)
+ * set_media_list (Public)
**************************************************************************/
void libvlc_media_list_player_set_media_list(
libvlc_media_list_player_t * p_mlp,
if( p_mlp->i_current_playing_index < 0 )
{
libvlc_media_list_player_next( p_mlp, p_e );
-
- if( libvlc_exception_raised( p_e ) )
- return;
+ return; /* Will set to play */
}
libvlc_media_instance_play( p_mlp->p_mi, p_e );
if( libvlc_exception_raised( p_e ) )
return;
+ /* Send the next item event */
+ libvlc_event_t event;
+ event.type = libvlc_MediaListPlayerNextItemSet;
+ libvlc_event_send( p_mlp->p_event_manager, &event );
+
libvlc_media_instance_play( p_mlp->p_mi, p_e );
}
media_list_player_set_next( p_mlp, index, p_e );
+ libvlc_media_instance_play( p_mlp->p_mi, p_e );
+
libvlc_media_list_unlock( p_mlp->p_mlist );
+
+ /* Send the next item event */
+ libvlc_event_t event;
+ event.type = libvlc_MediaListPlayerNextItemSet;
+ libvlc_event_send( p_mlp->p_event_manager, &event);
}