typedef enum libvlc_event_type_t {
libvlc_MediaDescriptorMetaChanged,
+ libvlc_MediaDescriptorSubItemAdded,
libvlc_MediaInstanceReachedEnd,
libvlc_MediaListItemAdded,
libvlc_MediaListItemDeleted,
libvlc_meta_t meta_type;
} media_descriptor_meta_changed;
struct
+ {
+ libvlc_media_descriptor_t * new_child;
+ } media_descriptor_subitem_added;
+ struct
{
libvlc_media_descriptor_t * item;
int index;
[vlc_meta_TrackID] = libvlc_meta_TrackID
};
+/**************************************************************************
+ * input_item_subitem_added (Private) (vlc event Callback)
+ **************************************************************************/
+static void input_item_subitem_added( const vlc_event_t *p_event,
+ void * user_data )
+{
+ libvlc_media_descriptor_t * p_md = user_data;
+ libvlc_media_descriptor_t * p_md_child;
+ libvlc_event_t event;
+
+ p_md_child = libvlc_media_descriptor_new_from_input_item(
+ p_md->p_libvlc_instance,
+ p_event->u.input_item_subitem_added.p_new_child, NULL );
+
+ /* Construct the event */
+ event.type = libvlc_MediaDescriptorSubItemAdded;
+ event.u.media_descriptor_subitem_added.new_child = p_md_child;
+
+ /* Send the event */
+ libvlc_event_send( p_md->p_event_manager, &event );
+ libvlc_media_descriptor_release( p_md_child );
+}
+
/**************************************************************************
* input_item_meta_changed (Private) (vlc event Callback)
**************************************************************************/
**************************************************************************/
static void install_input_item_observer( libvlc_media_descriptor_t *p_md )
{
+ vlc_event_attach( &p_md->p_input_item->event_manager,
+ vlc_InputItemSubItemAdded,
+ input_item_subitem_added,
+ p_md );
vlc_event_attach( &p_md->p_input_item->event_manager,
vlc_InputItemMetaChanged,
input_item_meta_changed,
**************************************************************************/
static void uninstall_input_item_observer( libvlc_media_descriptor_t *p_md )
{
+ vlc_event_detach( &p_md->p_input_item->event_manager,
+ vlc_InputItemSubItemAdded,
+ input_item_subitem_added,
+ p_md );
vlc_event_detach( &p_md->p_input_item->event_manager,
vlc_InputItemMetaChanged,
input_item_meta_changed,
p_md->b_preparsed = VLC_TRUE;
p_md->i_refcount = 1;
p_md->p_event_manager = libvlc_event_manager_new( p_md, p_instance, p_e );
+
libvlc_event_manager_register_event_type( p_md->p_event_manager,
libvlc_MediaDescriptorMetaChanged, p_e );
+ libvlc_event_manager_register_event_type( p_md->p_event_manager,
+ libvlc_MediaDescriptorSubItemAdded, p_e );
+
vlc_gc_incref( p_md->p_input_item );
install_input_item_observer( p_md );