libvlc_meta_t e_meta,
libvlc_exception_t *p_e );
+VLC_PUBLIC_API libvlc_state_t libvlc_media_descriptor_get_state(
+ libvlc_media_descriptor_t *p_meta_desc,
+ libvlc_exception_t *p_e );
+
/* Tags */
VLC_PUBLIC_API void libvlc_media_descriptor_add_tag( libvlc_media_descriptor_t *p_md,
const char * key,
typedef enum libvlc_state_t
{
+ libvlc_NothingSpecial,
libvlc_Stopped,
libvlc_Opening,
libvlc_Buffering,
libvlc_MediaDescriptorDurationChanged,
libvlc_MediaDescriptorPreparsedChanged,
libvlc_MediaDescriptorFreed,
+ libvlc_MediaDescriptorStateChanged,
libvlc_MediaInstancePlayed,
libvlc_MediaInstancePaused,
{
libvlc_media_descriptor_t * md;
} media_descriptor_freed;
+ struct
+ {
+ libvlc_state_t new_state;
+ } media_descriptor_state_changed;
/* media instance */
struct
int i_refcount;
libvlc_instance_t *p_libvlc_instance;
vlc_dictionary_t tags; /* To be merged with core's meta soon */
+ libvlc_state_t state;
struct libvlc_media_list_t *p_subitems; /* A media descriptor can have
* Sub item */
void *p_user_data; /* Allows for VLC.framework to hook into media descriptor without creating a new VLCMedia object. */
VLC_EXPORT (libvlc_media_descriptor_t *, libvlc_media_descriptor_duplicate,
( libvlc_media_descriptor_t * ) );
+VLC_EXPORT (void, libvlc_media_descriptor_set_state,
+ ( libvlc_media_descriptor_t *, libvlc_state_t, libvlc_exception_t * ) );
+
/* Media List View */
VLC_EXPORT ( libvlc_media_list_view_t *, libvlc_media_list_view_new,
( libvlc_media_list_t * p_mlist,
p_md->p_input_item = p_input_item;
p_md->b_preparsed = VLC_FALSE;
p_md->i_refcount = 1;
- p_md->p_user_data = NULL; // VLC.framework hook
+ p_md->p_user_data = NULL;
+
+ p_md->state = libvlc_NothingSpecial;
/* A media descriptor can be a playlist. When you open a playlist
* It can give a bunch of item to read. */
libvlc_MediaDescriptorFreed, p_e );
libvlc_event_manager_register_event_type( p_md->p_event_manager,
libvlc_MediaDescriptorDurationChanged, p_e );
+ libvlc_event_manager_register_event_type( p_md->p_event_manager,
+ libvlc_MediaDescriptorStateChanged, p_e );
vlc_gc_incref( p_md->p_input_item );
return psz_meta;
}
+/**************************************************************************
+ * Getter for state information
+ * Can be error, playing, buffering, NothingSpecial.
+ **************************************************************************/
+
+libvlc_state_t
+libvlc_media_descriptor_get_state( libvlc_media_descriptor_t *p_md,
+ libvlc_exception_t *p_e )
+{
+ (void)p_e;
+ return p_md->state;
+}
+
+/**************************************************************************
+ * Setter for state information (LibVLC Internal)
+ **************************************************************************/
+
+void
+libvlc_media_descriptor_set_state( libvlc_media_descriptor_t *p_md,
+ libvlc_state_t state,
+ libvlc_exception_t *p_e )
+{
+ (void)p_e;
+ libvlc_event_t event;
+
+ p_md->state = state;
+
+ /* Construct the event */
+ event.type = libvlc_MediaDescriptorStateChanged;
+ event.u.media_descriptor_state_changed.new_state = state;
+
+ /* Send the event */
+ libvlc_event_send( p_md->p_event_manager, &event );
+}
+
/**************************************************************************
* Add a tag
**************************************************************************/
#include "libvlc_internal.h"
#include "libvlc.h"
+static const libvlc_state_t vlc_to_libvlc_state_array[] =
+{
+ [INIT_S] = libvlc_Opening,
+ [OPENING_S] = libvlc_Opening,
+ [BUFFERING_S] = libvlc_Buffering,
+ [PLAYING_S] = libvlc_Playing,
+ [PAUSE_S] = libvlc_Paused,
+ [END_S] = libvlc_Ended,
+ [ERROR_S] = libvlc_Error,
+};
+static inline libvlc_state_t vlc_to_libvlc_state( int vlc_state )
+{
+ if( vlc_state < 0 || vlc_state > 6 )
+ return libvlc_Stopped;
+
+ return vlc_to_libvlc_state_array[vlc_state];
+}
+
/*
* Release the associated input thread
*
libvlc_media_instance_t * p_mi = p_userdata;
libvlc_event_t event;
+ printf("input_state_changed!!!!!!!!\n");
if( newval.i_int == oldval.i_int )
return VLC_SUCCESS; /* No change since last time, don't propagate */
switch ( newval.i_int )
{
case END_S:
+ libvlc_media_descriptor_set_state( p_mi->p_md, libvlc_NothingSpecial, NULL);
event.type = libvlc_MediaInstanceReachedEnd;
break;
case PAUSE_S:
+ libvlc_media_descriptor_set_state( p_mi->p_md, libvlc_Playing, NULL);
event.type = libvlc_MediaInstancePaused;
break;
case PLAYING_S:
+ printf("PLAYING_S!!!!!!!!\n");
+ libvlc_media_descriptor_set_state( p_mi->p_md, libvlc_Playing, NULL);
+ event.type = libvlc_MediaInstancePlayed;
+ break;
+ case ERROR_S:
+ libvlc_media_descriptor_set_state( p_mi->p_md, libvlc_Error, NULL);
event.type = libvlc_MediaInstancePlayed;
break;
default:
return (float)1000.0f/val.i_int;
}
-static const libvlc_state_t vlc_to_libvlc_state[] =
-{
- [INIT_S] = libvlc_Opening,
- [OPENING_S] = libvlc_Opening,
- [BUFFERING_S] = libvlc_Buffering,
- [PLAYING_S] = libvlc_Playing,
- [PAUSE_S] = libvlc_Paused,
- [END_S] = libvlc_Ended,
- [ERROR_S] = libvlc_Error,
-};
-
libvlc_state_t libvlc_media_instance_get_state(
libvlc_media_instance_t *p_mi,
libvlc_exception_t *p_e )
var_Get( p_input_thread, "state", &val );
vlc_object_release( p_input_thread );
- if( val.i_int < 0 || val.i_int > 6 )
- return libvlc_Stopped;
-
- return vlc_to_libvlc_state[val.i_int];
+ return vlc_to_libvlc_state(val.i_int);
}