1
mirror of https://code.videolan.org/videolan/vlc synced 2024-08-27 04:21:53 +02:00

control/media_descriptor.c: Forward vlc_InputItemSubItemAdded event.

This commit is contained in:
Pierre d'Herbemont 2007-08-16 18:05:07 +00:00
parent 42ab1e40cd
commit 728d2811a2
2 changed files with 40 additions and 0 deletions

View File

@ -242,6 +242,7 @@ typedef struct libvlc_log_message_t
typedef enum libvlc_event_type_t {
libvlc_MediaDescriptorMetaChanged,
libvlc_MediaDescriptorSubItemAdded,
libvlc_MediaInstanceReachedEnd,
libvlc_MediaListItemAdded,
libvlc_MediaListItemDeleted,
@ -266,6 +267,10 @@ typedef struct libvlc_event_t
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;

View File

@ -69,6 +69,29 @@ static const libvlc_meta_t vlc_to_libvlc_meta[] =
[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)
**************************************************************************/
@ -93,6 +116,10 @@ static void input_item_meta_changed( const vlc_event_t *p_event,
**************************************************************************/
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,
@ -104,6 +131,10 @@ static void install_input_item_observer( libvlc_media_descriptor_t *p_md )
**************************************************************************/
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,
@ -148,8 +179,12 @@ libvlc_media_descriptor_t * libvlc_media_descriptor_new_from_input_item(
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 );