⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 media_list_player.c

📁 VLC Player Source Code
💻 C
📖 第 1 页 / 共 2 页
字号:
/* * Public libvlc functions *//************************************************************************** *         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 = malloc(sizeof(libvlc_media_list_player_t));    if( !p_mlp )        return NULL;    p_mlp->current_playing_item_path = NULL;    p_mlp->p_mi = NULL;    p_mlp->p_mlist = NULL;    vlc_mutex_init( &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 );    return p_mlp;}/************************************************************************** *         release (Public) **************************************************************************/void libvlc_media_list_player_release( libvlc_media_list_player_t * p_mlp ){    free(p_mlp);}/************************************************************************** *        set_media_player (Public) **************************************************************************/void libvlc_media_list_player_set_media_player(                                     libvlc_media_list_player_t * p_mlp,                                     libvlc_media_player_t * p_mi,                                     libvlc_exception_t * p_e ){    VLC_UNUSED(p_e);    vlc_mutex_lock( &p_mlp->object_lock );    if( p_mlp->p_mi )    {        uninstall_media_player_observer( p_mlp );        libvlc_media_player_release( p_mlp->p_mi );    }    libvlc_media_player_retain( p_mi );    p_mlp->p_mi = p_mi;    install_media_player_observer( p_mlp );    vlc_mutex_unlock( &p_mlp->object_lock );}/************************************************************************** *       set_media_list (Public) **************************************************************************/void libvlc_media_list_player_set_media_list(                                     libvlc_media_list_player_t * p_mlp,                                     libvlc_media_list_t * p_mlist,                                     libvlc_exception_t * p_e ){    vlc_mutex_lock( &p_mlp->object_lock );    if( libvlc_media_list_player_is_playing( p_mlp, p_e ) )    {        libvlc_media_player_stop( p_mlp->p_mi, p_e );        /* Don't bother if there was an error. */        libvlc_exception_clear( p_e );    }    if( p_mlp->p_mlist )    {        uninstall_playlist_observer( p_mlp );        libvlc_media_list_release( p_mlp->p_mlist );    }    libvlc_media_list_retain( p_mlist );    p_mlp->p_mlist = p_mlist;     install_playlist_observer( p_mlp );    vlc_mutex_unlock( &p_mlp->object_lock );}/************************************************************************** *        Play (Public) **************************************************************************/void libvlc_media_list_player_play( libvlc_media_list_player_t * p_mlp,                                  libvlc_exception_t * p_e ){    if( !p_mlp->current_playing_item_path )    {        libvlc_media_list_player_next( p_mlp, p_e );        return; /* Will set to play */    }    libvlc_media_player_play( p_mlp->p_mi, p_e );}/************************************************************************** *        Pause (Public) **************************************************************************/void libvlc_media_list_player_pause( libvlc_media_list_player_t * p_mlp,                                     libvlc_exception_t * p_e ){    if( !p_mlp->p_mi )        return;    libvlc_media_player_pause( p_mlp->p_mi, p_e );}/************************************************************************** *        is_playing (Public) **************************************************************************/intlibvlc_media_list_player_is_playing( libvlc_media_list_player_t * p_mlp,                                     libvlc_exception_t * p_e ){    libvlc_state_t state = libvlc_media_player_get_state( p_mlp->p_mi, p_e );    return (state == libvlc_Opening) || (state == libvlc_Buffering) ||           (state == libvlc_Forward) || (state == libvlc_Backward) ||           (state == libvlc_Playing);}/************************************************************************** *        State (Public) **************************************************************************/libvlc_state_tlibvlc_media_list_player_get_state( libvlc_media_list_player_t * p_mlp,                                    libvlc_exception_t * p_e ){    if( !p_mlp->p_mi )        return libvlc_Ended;    return libvlc_media_player_get_state( p_mlp->p_mi, p_e );}/************************************************************************** *        Play item at index (Public) **************************************************************************/void libvlc_media_list_player_play_item_at_index(                        libvlc_media_list_player_t * p_mlp,                        int i_index,                        libvlc_exception_t * p_e ){    set_current_playing_item( p_mlp, libvlc_media_list_path_with_root_index(i_index), 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_player_play( p_mlp->p_mi, p_e );}/************************************************************************** *        Play item (Public) **************************************************************************/void libvlc_media_list_player_play_item(                        libvlc_media_list_player_t * p_mlp,                        libvlc_media_t * p_md,                        libvlc_exception_t * p_e ){    libvlc_media_list_path_t path = libvlc_media_list_path_of_item( p_mlp->p_mlist, p_md );    if( !path )    {        libvlc_exception_raise( p_e, "No such item in media list" );        return;    }    set_current_playing_item( p_mlp, path, p_e );    if( libvlc_exception_raised( p_e ) )        return;    libvlc_media_player_play( p_mlp->p_mi, p_e );}/************************************************************************** *       Stop (Public) **************************************************************************/void libvlc_media_list_player_stop( libvlc_media_list_player_t * p_mlp,                                    libvlc_exception_t * p_e ){    if ( p_mlp->p_mi )    {        /* We are not interested in getting media stop event now */        uninstall_media_player_observer( p_mlp );        libvlc_media_player_stop( p_mlp->p_mi, p_e );        install_media_player_observer( p_mlp );    }    vlc_mutex_lock( &p_mlp->object_lock );    free( p_mlp->current_playing_item_path );    p_mlp->current_playing_item_path = NULL;    vlc_mutex_unlock( &p_mlp->object_lock );}/************************************************************************** *       Next (Public) **************************************************************************/void libvlc_media_list_player_next( libvlc_media_list_player_t * p_mlp,                                    libvlc_exception_t * p_e ){    libvlc_media_list_path_t path;    if (! p_mlp->p_mlist )    {        libvlc_exception_raise( p_e, "No more element to play" );        return;    }    libvlc_media_list_lock( p_mlp->p_mlist );    path = get_next_path( p_mlp );    if( !path )    {        libvlc_media_list_unlock( p_mlp->p_mlist );        libvlc_exception_raise( p_e, "No more element to play" );        libvlc_media_list_player_stop( p_mlp, p_e );        return;    }    set_current_playing_item( p_mlp, path, p_e );    libvlc_media_player_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);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -