Exemplo n.º 1
0
/**************************************************************************
 *       set_current_playing_item (private)
 *
 * Playlist lock should be held
 **************************************************************************/
static void
set_current_playing_item(libvlc_media_list_player_t * p_mlp, libvlc_media_list_path_t path)
{
    assert_locked(p_mlp);

    /* First, save the new path that we are going to play */
    if (p_mlp->current_playing_item_path != path)
    {
        free(p_mlp->current_playing_item_path);
        p_mlp->current_playing_item_path = path;
    }

    if (!path)
        return;

    libvlc_media_t * p_md;
    p_md = libvlc_media_list_item_at_path(p_mlp->p_mlist, path);
    if (!p_md)
        return;
    
    /* Make sure media_player_reached_end() won't get called */
    uninstall_media_player_observer(p_mlp);

    /* Create a new media_player if there is none */
    if (!p_mlp->p_mi)
        p_mlp->p_mi = libvlc_media_player_new_from_media(p_md, NULL);

    libvlc_media_player_set_media(p_mlp->p_mi, p_md, NULL);

    install_media_player_observer(p_mlp);
    libvlc_media_release(p_md); /* for libvlc_media_list_item_at_index */
}
Exemplo n.º 2
0
/**************************************************************************
 *       Stop (Private)
 *
 * Lock must be held.
 **************************************************************************/
static void stop(libvlc_media_list_player_t * p_mlp, libvlc_exception_t * p_e)
{
    assert_locked(p_mlp);

    if (p_mlp->p_mi && p_mlp->current_playing_item_path)
    {
        /* 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);
    }

    free(p_mlp->current_playing_item_path);
    p_mlp->current_playing_item_path = NULL;
}
Exemplo n.º 3
0
/**************************************************************************
 *        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_media_player_t *p_oldmi;

    assert(p_mi != NULL);
    libvlc_media_player_retain(p_mi);

    lock(p_mlp);
    uninstall_media_player_observer(p_mlp);
    p_oldmi = p_mlp->p_mi;
    p_mlp->p_mi = p_mi;
    install_media_player_observer(p_mlp);
    unlock(p_mlp);

    libvlc_media_player_release(p_oldmi);
}
Exemplo n.º 4
0
/**************************************************************************
 *        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)
{
    lock(p_mlp);

    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);

    unlock(p_mlp);
}
Exemplo n.º 5
0
/**************************************************************************
 *       Stop (Private)
 *
 * Lock must be held.
 **************************************************************************/
static void stop(libvlc_media_list_player_t * p_mlp)
{
    assert_locked(p_mlp);

    /* We are not interested in getting media stop event now */
    uninstall_media_player_observer(p_mlp);
    libvlc_media_player_stop(p_mlp->p_mi);
    install_media_player_observer(p_mlp);

    free(p_mlp->current_playing_item_path);
    p_mlp->current_playing_item_path = NULL;

    /* Send the event */
    libvlc_event_t event;
    event.type = libvlc_MediaListPlayerStopped;
    libvlc_event_send(&p_mlp->event_manager, &event);
}
Exemplo n.º 6
0
/**************************************************************************
 *         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->i_refcount = 1;
    p_mlp->seek_offset = 0;
    vlc_mutex_init(&p_mlp->object_lock);
    vlc_mutex_init(&p_mlp->mp_callback_lock);
    vlc_cond_init(&p_mlp->seek_pending);

    p_mlp->p_event_manager = libvlc_event_manager_new(p_mlp);
    if (unlikely(p_mlp->p_event_manager == NULL))
        goto error;

    /* Create the underlying media_player */
    p_mlp->p_mi = libvlc_media_player_new(p_instance);
    if( p_mlp->p_mi == NULL )
    {
        libvlc_event_manager_release(p_mlp->p_event_manager);
        goto error;
    }
    install_media_player_observer(p_mlp);

    if (vlc_clone(&p_mlp->thread, playlist_thread, p_mlp,
                  VLC_THREAD_PRIORITY_LOW))
    {
        libvlc_media_player_release(p_mlp->p_mi);
        libvlc_event_manager_release(p_mlp->p_event_manager);
        goto error;
    }

    return p_mlp;
error:
    vlc_cond_destroy(&p_mlp->seek_pending);
    vlc_mutex_destroy(&p_mlp->mp_callback_lock);
    vlc_mutex_destroy(&p_mlp->object_lock);
    free(p_mlp);
    return NULL;
}
Exemplo n.º 7
0
/**************************************************************************
 *        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);

    lock(p_mlp);

    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);

    unlock(p_mlp);
}