/************************************************************************** * new (Public) **************************************************************************/ libvlc_media_list_player_t * libvlc_media_list_player_new(libvlc_instance_t * p_instance) { libvlc_media_list_player_t * p_mlp; p_mlp = calloc( 1, sizeof(libvlc_media_list_player_t) ); if (unlikely(p_mlp == NULL)) { libvlc_printerr("Not enough memory"); return NULL; } p_mlp->p_event_manager = libvlc_event_manager_new(p_mlp, p_instance); if (unlikely(p_mlp->p_event_manager == NULL)) { free (p_mlp); return NULL; } libvlc_retain(p_instance); p_mlp->p_libvlc_instance = p_instance; p_mlp->i_refcount = 1; vlc_mutex_init(&p_mlp->object_lock); vlc_mutex_init(&p_mlp->mp_callback_lock); libvlc_event_manager_register_event_type(p_mlp->p_event_manager, libvlc_MediaListPlayerNextItemSet); p_mlp->e_playback_mode = libvlc_playback_mode_default; return p_mlp; }
/************************************************************************** * libvlc_media_list_view_new (Internal) **************************************************************************/ libvlc_media_list_view_t * libvlc_media_list_view_new( libvlc_media_list_t * p_mlist, libvlc_media_list_view_count_func_t pf_count, libvlc_media_list_view_item_at_index_func_t pf_item_at_index, libvlc_media_list_view_children_at_index_func_t pf_children_at_index, libvlc_media_list_view_constructor_func_t pf_constructor, libvlc_media_list_view_release_func_t pf_release, void * this_view_data, libvlc_exception_t * p_e ) { libvlc_media_list_view_t * p_mlv; p_mlv = calloc( 1, sizeof(libvlc_media_list_view_t) ); if( !p_mlv ) return NULL; p_mlv->p_libvlc_instance = p_mlist->p_libvlc_instance; p_mlv->p_event_manager = libvlc_event_manager_new( p_mlist, p_mlv->p_libvlc_instance, p_e ); libvlc_event_manager_register_event_type( p_mlv->p_event_manager, libvlc_MediaListViewItemAdded, p_e ); libvlc_event_manager_register_event_type( p_mlv->p_event_manager, libvlc_MediaListViewWillAddItem, p_e ); libvlc_event_manager_register_event_type( p_mlv->p_event_manager, libvlc_MediaListViewItemDeleted, p_e ); libvlc_event_manager_register_event_type( p_mlv->p_event_manager, libvlc_MediaListViewWillDeleteItem, p_e ); libvlc_media_list_retain( p_mlist ); p_mlv->p_mlist = p_mlist; p_mlv->pf_count = pf_count; p_mlv->pf_item_at_index = pf_item_at_index; p_mlv->pf_children_at_index = pf_children_at_index; p_mlv->pf_constructor = pf_constructor; p_mlv->pf_release = pf_release; p_mlv->p_this_view_data = this_view_data; vlc_mutex_init( &p_mlv->object_lock ); p_mlv->i_refcount = 1; return p_mlv; }
/************************************************************************** * libvlc_media_list_new (Public) * * Init an object. **************************************************************************/ libvlc_media_list_t * libvlc_media_list_new( libvlc_instance_t * p_inst ) { libvlc_media_list_t * p_mlist; p_mlist = malloc(sizeof(libvlc_media_list_t)); if( unlikely(p_mlist == NULL) ) { libvlc_printerr( "Not enough memory" ); return NULL; } p_mlist->p_libvlc_instance = p_inst; p_mlist->p_event_manager = libvlc_event_manager_new( p_mlist, p_inst ); if( unlikely(p_mlist->p_event_manager == NULL) ) { free(p_mlist); return NULL; } p_mlist->b_read_only = false; libvlc_event_manager_register_event_type( p_mlist->p_event_manager, libvlc_MediaListItemAdded ); libvlc_event_manager_register_event_type( p_mlist->p_event_manager, libvlc_MediaListWillAddItem ); libvlc_event_manager_register_event_type( p_mlist->p_event_manager, libvlc_MediaListItemDeleted ); libvlc_event_manager_register_event_type( p_mlist->p_event_manager, libvlc_MediaListWillDeleteItem ); libvlc_event_manager_register_event_type( p_mlist->p_event_manager, libvlc_MediaListEndReached ); vlc_mutex_init( &p_mlist->object_lock ); vlc_mutex_init( &p_mlist->refcount_lock ); // FIXME: spinlock? vlc_array_init( &p_mlist->items ); assert( p_mlist->items.i_count == 0 ); p_mlist->i_refcount = 1; p_mlist->p_md = NULL; p_mlist->p_internal_md = NULL; return p_mlist; }
/************************************************************************** * libvlc_media_list_new (Public) * * Init an object. **************************************************************************/ libvlc_media_list_t * libvlc_media_list_new( libvlc_instance_t * p_inst, libvlc_exception_t * p_e ) { libvlc_media_list_t * p_mlist; p_mlist = malloc(sizeof(libvlc_media_list_t)); if( !p_mlist ) return NULL; p_mlist->p_libvlc_instance = p_inst; p_mlist->p_event_manager = libvlc_event_manager_new( p_mlist, p_inst, p_e ); /* Code for that one should be handled in flat_media_list.c */ p_mlist->p_flat_mlist = NULL; p_mlist->b_read_only = false; libvlc_event_manager_register_event_type( p_mlist->p_event_manager, libvlc_MediaListItemAdded, p_e ); libvlc_event_manager_register_event_type( p_mlist->p_event_manager, libvlc_MediaListWillAddItem, p_e ); libvlc_event_manager_register_event_type( p_mlist->p_event_manager, libvlc_MediaListItemDeleted, p_e ); libvlc_event_manager_register_event_type( p_mlist->p_event_manager, libvlc_MediaListWillDeleteItem, p_e ); if( libvlc_exception_raised( p_e ) ) { libvlc_event_manager_release( p_mlist->p_event_manager ); free( p_mlist ); return NULL; } vlc_mutex_init( &p_mlist->object_lock ); vlc_mutex_init( &p_mlist->refcount_lock ); // FIXME: spinlock? vlc_array_init( &p_mlist->items ); p_mlist->i_refcount = 1; p_mlist->p_md = NULL; return p_mlist; }
/************************************************************************** * Create a new media descriptor object from an input_item * (libvlc internal) * That's the generic constructor **************************************************************************/ libvlc_media_t * libvlc_media_new_from_input_item( libvlc_instance_t *p_instance, input_item_t *p_input_item ) { libvlc_media_t * p_md; if (!p_input_item) { libvlc_printerr( "No input item given" ); return NULL; } p_md = calloc( 1, sizeof(libvlc_media_t) ); if( !p_md ) { libvlc_printerr( "Not enough memory" ); return NULL; } p_md->p_libvlc_instance = p_instance; p_md->p_input_item = p_input_item; p_md->i_refcount = 1; vlc_cond_init(&p_md->parsed_cond); vlc_mutex_init(&p_md->parsed_lock); vlc_mutex_init(&p_md->subitems_lock); 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. */ p_md->p_subitems = NULL; p_md->p_event_manager = libvlc_event_manager_new( p_md, p_instance ); if( unlikely(p_md->p_event_manager == NULL) ) { free(p_md); return NULL; } libvlc_event_manager_t *em = p_md->p_event_manager; libvlc_event_manager_register_event_type(em, libvlc_MediaMetaChanged); libvlc_event_manager_register_event_type(em, libvlc_MediaSubItemAdded); libvlc_event_manager_register_event_type(em, libvlc_MediaFreed); libvlc_event_manager_register_event_type(em, libvlc_MediaDurationChanged); libvlc_event_manager_register_event_type(em, libvlc_MediaStateChanged); libvlc_event_manager_register_event_type(em, libvlc_MediaParsedChanged); libvlc_event_manager_register_event_type(em, libvlc_MediaSubItemTreeAdded); vlc_gc_incref( p_md->p_input_item ); install_input_item_observer( p_md ); return p_md; }
/************************************************************************** * new (Public) **************************************************************************/ libvlc_media_list_player_t * libvlc_media_list_player_new(libvlc_instance_t * p_instance, libvlc_exception_t * p_e) { (void)p_e; libvlc_media_list_player_t * p_mlp; p_mlp = calloc( 1, sizeof(libvlc_media_list_player_t) ); if (!p_mlp) return NULL; libvlc_retain(p_instance); p_mlp->p_libvlc_instance = p_instance; p_mlp->i_refcount = 1; vlc_mutex_init(&p_mlp->object_lock); vlc_mutex_init(&p_mlp->mp_callback_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); p_mlp->e_playback_mode = libvlc_playback_mode_default; return p_mlp; }
static inline void __register_event(libvlc_media_player_t *mp, libvlc_event_type_t type) { libvlc_event_manager_register_event_type(mp->p_event_manager, type); }
/************************************************************************** * new (Public) * * Init an object. **************************************************************************/ libvlc_media_discoverer_t * libvlc_media_discoverer_new_from_name( libvlc_instance_t * p_inst, const char * psz_name, libvlc_exception_t * p_e ) { libvlc_media_discoverer_t * p_mdis; p_mdis = malloc(sizeof(libvlc_media_discoverer_t)); if( !p_mdis ) { libvlc_exception_raise( p_e, "Not enough memory" ); return NULL; } p_mdis->p_libvlc_instance = p_inst; p_mdis->p_mlist = libvlc_media_list_new( p_inst, NULL ); p_mdis->p_mlist->b_read_only = true; p_mdis->running = false; vlc_dictionary_init( &p_mdis->catname_to_submedialist, 0 ); p_mdis->p_event_manager = libvlc_event_manager_new( p_mdis, p_inst, NULL ); libvlc_event_manager_register_event_type( p_mdis->p_event_manager, libvlc_MediaDiscovererStarted, NULL ); libvlc_event_manager_register_event_type( p_mdis->p_event_manager, libvlc_MediaDiscovererEnded, NULL ); p_mdis->p_sd = services_discovery_Create( (vlc_object_t*)p_inst->p_libvlc_int, psz_name ); if( !p_mdis->p_sd ) { libvlc_exception_raise( p_e, "Can't find the services_discovery module named '%s'", psz_name ); libvlc_media_list_release( p_mdis->p_mlist ); free( p_mdis ); return NULL; } vlc_event_attach( services_discovery_EventManager( p_mdis->p_sd ), vlc_ServicesDiscoveryItemAdded, services_discovery_item_added, p_mdis ); vlc_event_attach( services_discovery_EventManager( p_mdis->p_sd ), vlc_ServicesDiscoveryItemRemoved, services_discovery_item_removed, p_mdis ); vlc_event_attach( services_discovery_EventManager( p_mdis->p_sd ), vlc_ServicesDiscoveryStarted, services_discovery_started, p_mdis ); vlc_event_attach( services_discovery_EventManager( p_mdis->p_sd ), vlc_ServicesDiscoveryEnded, services_discovery_ended, p_mdis ); services_discovery_Start( p_mdis->p_sd ); /* Here we go */ return p_mdis; }
static int libvlc_vlm_init( libvlc_instance_t *p_instance ) { if( !p_instance->libvlc_vlm.p_event_manager ) { p_instance->libvlc_vlm.p_event_manager = libvlc_event_manager_new( p_instance->libvlc_vlm.p_vlm, p_instance ); if( unlikely(p_instance->libvlc_vlm.p_event_manager == NULL) ) return VLC_ENOMEM; libvlc_event_manager_register_event_type( p_instance->libvlc_vlm.p_event_manager, libvlc_VlmMediaAdded ); libvlc_event_manager_register_event_type( p_instance->libvlc_vlm.p_event_manager, libvlc_VlmMediaRemoved ); libvlc_event_manager_register_event_type( p_instance->libvlc_vlm.p_event_manager, libvlc_VlmMediaChanged ); libvlc_event_manager_register_event_type( p_instance->libvlc_vlm.p_event_manager, libvlc_VlmMediaInstanceStarted ); libvlc_event_manager_register_event_type( p_instance->libvlc_vlm.p_event_manager, libvlc_VlmMediaInstanceStopped ); libvlc_event_manager_register_event_type( p_instance->libvlc_vlm.p_event_manager, libvlc_VlmMediaInstanceStatusInit ); libvlc_event_manager_register_event_type( p_instance->libvlc_vlm.p_event_manager, libvlc_VlmMediaInstanceStatusOpening ); libvlc_event_manager_register_event_type( p_instance->libvlc_vlm.p_event_manager, libvlc_VlmMediaInstanceStatusPlaying ); libvlc_event_manager_register_event_type( p_instance->libvlc_vlm.p_event_manager, libvlc_VlmMediaInstanceStatusPause ); libvlc_event_manager_register_event_type( p_instance->libvlc_vlm.p_event_manager, libvlc_VlmMediaInstanceStatusEnd ); libvlc_event_manager_register_event_type( p_instance->libvlc_vlm.p_event_manager, libvlc_VlmMediaInstanceStatusError ); } if( !p_instance->libvlc_vlm.p_vlm ) { p_instance->libvlc_vlm.p_vlm = vlm_New( p_instance->p_libvlc_int ); if( !p_instance->libvlc_vlm.p_vlm ) { libvlc_printerr( "VLM not supported or out of memory" ); return VLC_EGENERIC; } var_AddCallback( (vlc_object_t *)p_instance->libvlc_vlm.p_vlm, "intf-event", VlmEvent, p_instance->libvlc_vlm.p_event_manager ); p_instance->libvlc_vlm.pf_release = libvlc_vlm_release_internal; } return VLC_SUCCESS; }
/************************************************************************** * new (Public) * * Init an object. **************************************************************************/ libvlc_media_discoverer_t * libvlc_media_discoverer_new_from_name( libvlc_instance_t * p_inst, const char * psz_name ) { libvlc_media_discoverer_t * p_mdis; p_mdis = malloc(sizeof(libvlc_media_discoverer_t)); if( unlikely(!p_mdis) ) { libvlc_printerr( "Not enough memory" ); return NULL; } p_mdis->p_libvlc_instance = p_inst; p_mdis->p_mlist = libvlc_media_list_new( p_inst ); p_mdis->p_mlist->b_read_only = true; p_mdis->running = false; vlc_dictionary_init( &p_mdis->catname_to_submedialist, 0 ); p_mdis->p_event_manager = libvlc_event_manager_new( p_mdis, p_inst ); if( unlikely(p_mdis->p_event_manager == NULL) ) { free( p_mdis ); return NULL; } libvlc_event_manager_register_event_type( p_mdis->p_event_manager, libvlc_MediaDiscovererStarted ); libvlc_event_manager_register_event_type( p_mdis->p_event_manager, libvlc_MediaDiscovererEnded ); p_mdis->p_sd = vlc_sd_Create( (vlc_object_t*)p_inst->p_libvlc_int, psz_name ); if( unlikely(p_mdis->p_sd == NULL) ) { libvlc_printerr( "%s: no such discovery module found", psz_name ); libvlc_media_list_release( p_mdis->p_mlist ); libvlc_event_manager_release( p_mdis->p_event_manager ); free( p_mdis ); return NULL; } vlc_event_attach( services_discovery_EventManager( p_mdis->p_sd ), vlc_ServicesDiscoveryItemAdded, services_discovery_item_added, p_mdis ); vlc_event_attach( services_discovery_EventManager( p_mdis->p_sd ), vlc_ServicesDiscoveryItemRemoved, services_discovery_item_removed, p_mdis ); vlc_event_attach( services_discovery_EventManager( p_mdis->p_sd ), vlc_ServicesDiscoveryStarted, services_discovery_started, p_mdis ); vlc_event_attach( services_discovery_EventManager( p_mdis->p_sd ), vlc_ServicesDiscoveryEnded, services_discovery_ended, p_mdis ); vlc_event_attach( services_discovery_EventManager( p_mdis->p_sd ), vlc_ServicesDiscoveryItemRemoveAll, services_discovery_removeall, p_mdis ); /* Here we go */ if( !vlc_sd_Start( p_mdis->p_sd ) ) { libvlc_printerr( "%s: internal module error", p_mdis->p_sd->psz_name ); libvlc_media_list_release( p_mdis->p_mlist ); libvlc_event_manager_release( p_mdis->p_event_manager ); free( p_mdis ); return NULL; } return p_mdis; }