Playlist


Data Structures

struct  playlist_preparse_t
struct  playlist_fetcher_t
struct  playlist_export_t
 Helper structure to export to file part of the playlist. More...
struct  playlist_item_t
 playlist item / node More...
struct  playlist_t
 Structure containing information about the playlist. More...
struct  playlist_add_t
 Helper to add an item. More...

Defines

#define playlist_ThreadCreate(a)   __playlist_ThreadCreate(VLC_OBJECT(a))
#define PLAYLIST_SAVE_FLAG   0x0001
 Must it be saved.
#define PLAYLIST_SKIP_FLAG   0x0002
 Must playlist skip after it ?
#define PLAYLIST_DBL_FLAG   0x0004
 Is it disabled ?
#define PLAYLIST_RO_FLAG   0x0008
 Write-enabled ?
#define PLAYLIST_REMOVE_FLAG   0x0010
 Remove this item at the end.
#define PLAYLIST_EXPANDED_FLAG   0x0020
 Expanded node.
#define SORT_ID   0
#define SORT_TITLE   1
#define SORT_TITLE_NODES_FIRST   2
#define SORT_ARTIST   3
#define SORT_GENRE   4
#define SORT_RANDOM   5
#define SORT_DURATION   6
#define SORT_TITLE_NUMERIC   7
#define SORT_ALBUM   8
#define SORT_TRACK_NUMBER   9
#define SORT_DESCRIPTION   10
#define SORT_RATING   11
#define ORDER_NORMAL   0
#define ORDER_REVERSE   1
#define PLAYLIST_INSERT   0x0001
#define PLAYLIST_APPEND   0x0002
#define PLAYLIST_GO   0x0004
#define PLAYLIST_PREPARSE   0x0008
#define PLAYLIST_SPREPARSE   0x0010
#define PLAYLIST_NO_REBUILD   0x0020
#define PLAYLIST_END   -666
#define PL_LOCK   vlc_object_lock( p_playlist )
#define PL_UNLOCK   vlc_object_unlock( p_playlist )
#define pl_Yield(a)   __pl_Yield( VLC_OBJECT(a) )
#define pl_Release(a)   __pl_Release( VLC_OBJECT(a) )
#define playlist_Play(p)   playlist_Control(p,PLAYLIST_PLAY, pl_Unlocked )
#define playlist_Pause(p)   playlist_Control(p,PLAYLIST_PAUSE, pl_Unlocked )
#define playlist_Stop(p)   playlist_Control(p,PLAYLIST_STOP, pl_Unlocked )
#define playlist_Next(p)   playlist_Control(p,PLAYLIST_SKIP, pl_Unlocked, 1)
#define playlist_Prev(p)   playlist_Control(p,PLAYLIST_SKIP, pl_Unlocked, -1)
#define playlist_Skip(p, i)   playlist_Control(p,PLAYLIST_SKIP, pl_Unlocked, i)
#define playlist_ItemNew(a, b, c)   playlist_ItemNewWithType( VLC_OBJECT(a) , b , c, 0, NULL, -1, 0 )
 Create a new item, without adding it to the playlist.
#define pl_CurrentInput(a)   __pl_CurrentInput( VLC_OBJECT(a) )
 Small helper tp get current playing input or NULL.
#define playlist_IsPlaying(pl)
 Tell if the playlist is currently running.
#define playlist_IsStopped(pl)
#define playlist_IsEmpty(pl)   ( pl->items.i_size == 0 )
 Tell if the playlist is empty.
#define playlist_CurrentSize(pl)   pl->current.i_size
 Tell the number of items in the current playing context.
#define playlist_CurrentId(pl)   pl->status.p_item->i_id
 Tell the current item id in current playing context.
#define playlist_Signal(p_playlist)   vlc_object_signal( p_playlist )
 Ask the playlist to do some work.

Enumerations

enum  playlist_status_t { PLAYLIST_STOPPED, PLAYLIST_RUNNING, PLAYLIST_PAUSED }
 Playlist status. More...
enum  pl_locked_state { pl_Locked = true, pl_Unlocked = false }

Functions

void __playlist_ThreadCreate (vlc_object_t *)
 Create the main playlist thread Additionally to the playlist, this thread controls :
  • Statistics
  • VLM.

playlist_item_tplaylist_ItemNewFromInput (playlist_t *p_playlist, input_item_t *p_input)
playlist_tplaylist_Create (vlc_object_t *)
 Create playlist.
void playlist_MainLoop (playlist_t *)
 Main loop.
void playlist_LastLoop (playlist_t *)
 Last loop.
void playlist_PreparseLoop (playlist_preparse_t *)
 Preparse loop.
void playlist_FetcherLoop (playlist_fetcher_t *)
 Fetcher loop.
void ResetCurrentlyPlaying (playlist_t *, bool, playlist_item_t *)
playlist_item_tget_current_status_item (playlist_t *p_playlist)
 Accessor for status item and status nodes.
playlist_item_tget_current_status_node (playlist_t *p_playlist)
void set_current_status_item (playlist_t *, playlist_item_t *)
void set_current_status_node (playlist_t *, playlist_item_t *)
playlist_item_tplaylist_NextItem (playlist_t *)
 Compute the next playlist item depending on the playlist course mode (forward, backward, random, view,.
int playlist_PlayItem (playlist_t *, playlist_item_t *)
 Start the input for an item.
int playlist_MLLoad (playlist_t *p_playlist)
int playlist_MLDump (playlist_t *p_playlist)
void playlist_SendAddNotify (playlist_t *p_playlist, int i_item_id, int i_node_id, bool b_signal)
 Send a notification that an item has been added to a node.
playlist_item_tplaylist_NodeAddInput (playlist_t *, input_item_t *, playlist_item_t *, int, int, bool)
 Add an input item to a given node.
playlist_item_tplaylist_ItemFindFromInputAndRoot (playlist_t *p_playlist, int i_input_id, playlist_item_t *p_root, bool)
 Find an item within a root, given its input id.
int playlist_DeleteFromInputInParent (playlist_t *, int, playlist_item_t *, bool)
 Delete input item.
int playlist_DeleteFromItemId (playlist_t *, int)
 Delete playlist item.
int playlist_ItemRelease (playlist_item_t *)
 Release an item.
void playlist_release_current_input (playlist_t *p_playlist)
void playlist_set_current_input (playlist_t *p_playlist, input_thread_t *p_input)
playlist_t__pl_Yield (vlc_object_t *)
void __pl_Release (vlc_object_t *)
int playlist_Control (playlist_t *p_playlist, int i_query, bool b_locked,...)
 Do a playlist action.
input_thread_tplaylist_CurrentInput (playlist_t *p_playlist)
 Get current playing input.
void playlist_Clear (playlist_t *, bool)
 Clear the playlist.
int playlist_PreparseEnqueue (playlist_t *, input_item_t *)
 Enqueue an input item for preparsing.
int playlist_PreparseEnqueueItem (playlist_t *, playlist_item_t *)
 Enqueue a playlist item and all of its children if any for preparsing.
int playlist_AskForArtEnqueue (playlist_t *, input_item_t *)
 Request the art for an input item to be fetched.
int playlist_ServicesDiscoveryAdd (playlist_t *, const char *)
 Add a list of comma-separated service discovery modules.
int playlist_ServicesDiscoveryRemove (playlist_t *, const char *)
 Remove a services discovery module by name.
bool playlist_IsServicesDiscoveryLoaded (playlist_t *, const char *)
 Check whether a given SD is loaded.
int playlist_TreeMove (playlist_t *, playlist_item_t *, playlist_item_t *, int)
 Moves an item.
int playlist_RecursiveNodeSort (playlist_t *, playlist_item_t *, int, int)
 Sort a node recursively.
int playlist_Export (playlist_t *p_playlist, const char *psz_name, playlist_item_t *p_export_root, const char *psz_type)
 Export a node of the playlist to a certain type of playlistfile.
playlist_item_tplaylist_ItemNewWithType (playlist_t *, const char *, const char *, int, const char *const *, int, int)
int playlist_DeleteFromInput (playlist_t *, int, bool)
 Delete from input.
int playlist_ItemSetName (playlist_item_t *, const char *)
 Set the name of a playlist item.
int playlist_Add (playlist_t *, const char *, const char *, int, int, bool, bool)
 Playlist add.
int playlist_AddExt (playlist_t *, const char *, const char *, int, int, mtime_t, const char *const *, int, bool, bool)
 Add a MRL into the playlist or the media library, duration and options given.
int playlist_AddInput (playlist_t *, input_item_t *, int, int, bool, bool)
 Add an input item to the playlist node.
int playlist_BothAddInput (playlist_t *, input_item_t *, playlist_item_t *, int, int, int *, int *, bool)
 Add input.
playlist_item_tplaylist_ItemToNode (playlist_t *, playlist_item_t *, bool)
 Item to node.
playlist_item_tplaylist_ItemGetById (playlist_t *, int, bool)
 Search a playlist item by its playlist_item id.
playlist_item_tplaylist_ItemGetByInput (playlist_t *, input_item_t *, bool)
 Search an item by its input_item_t.
playlist_item_tplaylist_ItemGetByInputId (playlist_t *, int, playlist_item_t *)
 Get input by item id.
int playlist_LiveSearchUpdate (playlist_t *, playlist_item_t *, const char *)
int playlist_NodeChildrenCount (playlist_t *, playlist_item_t *)
 Count the children of a node.
playlist_item_tplaylist_NodeCreate (playlist_t *, const char *, playlist_item_t *p_parent, int i_flags, input_item_t *)
 Create a playlist node.
int playlist_NodeAppend (playlist_t *, playlist_item_t *, playlist_item_t *)
 Adds an item to the children of a node.
int playlist_NodeInsert (playlist_t *, playlist_item_t *, playlist_item_t *, int)
int playlist_NodeRemoveItem (playlist_t *, playlist_item_t *, playlist_item_t *)
 Deletes an item from the children of a node.
playlist_item_tplaylist_ChildSearchName (playlist_item_t *, const char *)
 Search a child of a node by its name.
int playlist_NodeDelete (playlist_t *, playlist_item_t *, bool, bool)
 Remove all the children of a node and removes the node.
int playlist_NodeEmpty (playlist_t *, playlist_item_t *, bool)
 Remove all the children of a node.
void playlist_NodesPairCreate (playlist_t *, const char *, playlist_item_t **, playlist_item_t **, bool)
 Create a pair of nodes in the category and onelevel trees.
playlist_item_tplaylist_GetPreferredNode (playlist_t *p_playlist, playlist_item_t *p_node)
 Get the node in the preferred tree from a node in one of category or onelevel tree.
playlist_item_tplaylist_GetNextLeaf (playlist_t *p_playlist, playlist_item_t *p_root, playlist_item_t *p_item, bool b_ena, bool b_unplayed)
 Finds the next item to play.
playlist_item_tplaylist_GetPrevLeaf (playlist_t *p_playlist, playlist_item_t *p_root, playlist_item_t *p_item, bool b_ena, bool b_unplayed)
 Finds the previous item to play.
playlist_item_tplaylist_GetLastLeaf (playlist_t *p_playlist, playlist_item_t *p_root)
static int playlist_Import (playlist_t *p_playlist, const char *psz_file)
 Open a playlist file, add its content to the current playlist.
static input_thread_t__pl_CurrentInput (vlc_object_t *p_this)

Define Documentation

#define ORDER_NORMAL   0

#define ORDER_REVERSE   1

#define pl_CurrentInput (  )     __pl_CurrentInput( VLC_OBJECT(a) )

Small helper tp get current playing input or NULL.

Release the input after use.

#define PL_LOCK   vlc_object_lock( p_playlist )

#define pl_Release (  )     __pl_Release( VLC_OBJECT(a) )

#define PL_UNLOCK   vlc_object_unlock( p_playlist )

#define pl_Yield (  )     __pl_Yield( VLC_OBJECT(a) )

#define PLAYLIST_APPEND   0x0002

#define playlist_CurrentId ( pl   )     pl->status.p_item->i_id

Tell the current item id in current playing context.

#define playlist_CurrentSize ( pl   )     pl->current.i_size

Tell the number of items in the current playing context.

#define PLAYLIST_DBL_FLAG   0x0004

Is it disabled ?

#define PLAYLIST_END   -666

#define PLAYLIST_EXPANDED_FLAG   0x0020

Expanded node.

#define PLAYLIST_GO   0x0004

#define PLAYLIST_INSERT   0x0001

#define playlist_IsEmpty ( pl   )     ( pl->items.i_size == 0 )

Tell if the playlist is empty.

#define playlist_IsPlaying ( pl   ) 

Value:

( pl->status.i_status == PLAYLIST_RUNNING && \
            !(pl->request.b_request && pl->request.i_status == PLAYLIST_STOPPED) )
Tell if the playlist is currently running.

#define playlist_IsStopped ( pl   ) 

Value:

( pl->status.i_status == PLAYLIST_STOPPED || \
            (pl->request.b_request && pl->request.i_status == PLAYLIST_STOPPED) )

#define playlist_ItemNew ( a,
b,
 )     playlist_ItemNewWithType( VLC_OBJECT(a) , b , c, 0, NULL, -1, 0 )

Create a new item, without adding it to the playlist.

Parameters:
p_obj a vlc object (anyone will do)
psz_uri the mrl of the item
psz_name a text giving a name or description of the item
Returns:
the new item or NULL on failure

#define playlist_Next (  )     playlist_Control(p,PLAYLIST_SKIP, pl_Unlocked, 1)

#define PLAYLIST_NO_REBUILD   0x0020

#define playlist_Pause (  )     playlist_Control(p,PLAYLIST_PAUSE, pl_Unlocked )

#define playlist_Play (  )     playlist_Control(p,PLAYLIST_PLAY, pl_Unlocked )

#define PLAYLIST_PREPARSE   0x0008

#define playlist_Prev (  )     playlist_Control(p,PLAYLIST_SKIP, pl_Unlocked, -1)

#define PLAYLIST_REMOVE_FLAG   0x0010

Remove this item at the end.

#define PLAYLIST_RO_FLAG   0x0008

Write-enabled ?

#define PLAYLIST_SAVE_FLAG   0x0001

Must it be saved.

#define playlist_Signal ( p_playlist   )     vlc_object_signal( p_playlist )

Ask the playlist to do some work.

#define playlist_Skip ( p,
 )     playlist_Control(p,PLAYLIST_SKIP, pl_Unlocked, i)

#define PLAYLIST_SKIP_FLAG   0x0002

Must playlist skip after it ?

#define PLAYLIST_SPREPARSE   0x0010

#define playlist_Stop (  )     playlist_Control(p,PLAYLIST_STOP, pl_Unlocked )

#define playlist_ThreadCreate (  )     __playlist_ThreadCreate(VLC_OBJECT(a))

#define SORT_ALBUM   8

#define SORT_ARTIST   3

#define SORT_DESCRIPTION   10

#define SORT_DURATION   6

#define SORT_GENRE   4

#define SORT_ID   0

#define SORT_RANDOM   5

#define SORT_RATING   11

#define SORT_TITLE   1

#define SORT_TITLE_NODES_FIRST   2

#define SORT_TITLE_NUMERIC   7

#define SORT_TRACK_NUMBER   9


Enumeration Type Documentation

enum pl_locked_state

Enumerator:
pl_Locked 
pl_Unlocked 

enum playlist_status_t

Playlist status.

Enumerator:
PLAYLIST_STOPPED 
PLAYLIST_RUNNING 
PLAYLIST_PAUSED 


Function Documentation

static input_thread_t* __pl_CurrentInput ( vlc_object_t p_this  )  [inline, static]

void __pl_Release ( vlc_object_t  ) 

playlist_t* __pl_Yield ( vlc_object_t  ) 

void __playlist_ThreadCreate ( vlc_object_t p_parent  ) 

Create the main playlist thread Additionally to the playlist, this thread controls :

Parameters:
p_parent 
Returns:
an object with a started thread

playlist_item_t* get_current_status_item ( playlist_t p_playlist  ) 

Accessor for status item and status nodes.

playlist_item_t* get_current_status_node ( playlist_t p_playlist  ) 

int playlist_Add ( playlist_t p_playlist,
const char *  psz_uri,
const char *  psz_name,
int  i_mode,
int  i_pos,
bool  b_playlist,
bool  b_locked 
)

Playlist add.

Add an item to the playlist or the media library

Parameters:
p_playlist the playlist to add into
psz_uri the mrl to add to the playlist
psz_name a text giving a name or description of this item
i_mode the mode used when adding
i_pos the position in the playlist where to add. If this is PLAYLIST_END the item will be added at the end of the playlist regardless of its size
b_playlist TRUE for playlist, FALSE for media library
b_locked TRUE if the playlist is locked
Returns:
The id of the playlist item

int playlist_AddExt ( playlist_t p_playlist,
const char *  psz_uri,
const char *  psz_name,
int  i_mode,
int  i_pos,
mtime_t  i_duration,
const char *const *  ppsz_options,
int  i_options,
bool  b_playlist,
bool  b_locked 
)

Add a MRL into the playlist or the media library, duration and options given.

Parameters:
p_playlist the playlist to add into
psz_uri the mrl to add to the playlist
psz_name a text giving a name or description of this item
i_mode the mode used when adding
i_pos the position in the playlist where to add. If this is PLAYLIST_END the item will be added at the end of the playlist regardless of its size
i_duration length of the item in milliseconds.
ppsz_options an array of options
i_options the number of options
b_playlist TRUE for playlist, FALSE for media library
b_locked TRUE if the playlist is locked
Returns:
The id of the playlist item

int playlist_AddInput ( playlist_t p_playlist,
input_item_t p_input,
int  i_mode,
int  i_pos,
bool  b_playlist,
bool  b_locked 
)

Add an input item to the playlist node.

Parameters:
p_playlist the playlist to add into
p_input the input item to add
i_mode the mode used when adding
i_pos the position in the playlist where to add. If this is PLAYLIST_END the item will be added at the end of the playlist regardless of its size
b_playlist TRUE for playlist, FALSE for media library
b_locked TRUE if the playlist is locked
Returns:
VLC_SUCCESS or VLC_ENOMEM or VLC_EGENERIC

int playlist_AskForArtEnqueue ( playlist_t ,
input_item_t  
)

Request the art for an input item to be fetched.

int playlist_BothAddInput ( playlist_t p_playlist,
input_item_t p_input,
playlist_item_t p_direct_parent,
int  i_mode,
int  i_pos,
int *  i_cat,
int *  i_one,
bool  b_locked 
)

Add input.

Add an input item to p_direct_parent in the category tree, and to the matching top category in onelevel

Parameters:
p_playlist the playlist to add into
p_input the input item to add
p_direct_parent the parent item to add into
i_mode the mode used when adding
i_pos the position in the playlist where to add. If this is PLAYLIST_END the item will be added at the end of the playlist regardless of its size
i_cat id of the items category
i_one id of the item onelevel category
b_locked TRUE if the playlist is locked
Returns:
VLC_SUCCESS if success, VLC_EGENERIC if fail, VLC_ENOMEM if OOM

 

Todo:
make a faster case for ml import

playlist_item_t* playlist_ChildSearchName ( playlist_item_t p_node,
const char *  psz_search 
)

Search a child of a node by its name.

Parameters:
p_node the node
psz_search the name of the child to search
Returns:
the child item or NULL if not found or error

void playlist_Clear ( playlist_t p_playlist,
bool  b_locked 
)

Clear the playlist.

Parameters:
p_playlist playlist object
b_locked TRUE if the playlist is locked
Returns:
nothing

int playlist_Control ( playlist_t p_playlist,
int  i_query,
bool  b_locked,
  ... 
)

Do a playlist action.

If there is something in the playlist then you can do playlist actions. Possible queries are listed in vlc_common.h

Parameters:
p_playlist the playlist to do the command on
i_query the command to do
b_locked TRUE if playlist is locked when entering this function
variable number of arguments
Returns:
VLC_SUCCESS or an error

playlist_t* playlist_Create ( vlc_object_t p_parent  ) 

Create playlist.

Create a playlist structure.

Parameters:
p_parent the vlc object that is to be the parent of this playlist
Returns:
a pointer to the created playlist, or NULL on error

< Write-enabled ?

< Write-enabled ?

< Write-enabled ?

< Write-enabled ?

input_thread_t* playlist_CurrentInput ( playlist_t p_playlist  ) 

Get current playing input.

The object is retained.

int playlist_DeleteFromInput ( playlist_t p_playlist,
int  i_input_id,
bool  b_locked 
)

Delete from input.

Remove an input item from ONELEVEL and CATEGORY

Parameters:
p_playlist playlist object
i_input_id id of the input to delete
b_locked TRUE if the playlist is locked
Returns:
VLC_SUCCESS or VLC_ENOITEM

< Item not found

int playlist_DeleteFromInputInParent ( playlist_t p_playlist,
int  i_input_id,
playlist_item_t p_root,
bool  b_locked 
)

Delete input item.

Remove an input item when it appears from a root playlist item

Parameters:
p_playlist playlist object
i_input_id id of the input to delete
p_root root playlist item
b_locked TRUE if the playlist is locked
Returns:
VLC_SUCCESS or VLC_EGENERIC

int playlist_DeleteFromItemId ( playlist_t p_playlist,
int  i_id 
)

Delete playlist item.

Remove a playlist item from the playlist, given its id This function is to be used only by the playlist

Parameters:
p_playlist playlist object
i_id id of the item do delete
Returns:
VLC_SUCCESS or an error

int playlist_Export ( playlist_t p_playlist,
const char *  psz_name,
playlist_item_t p_export_root,
const char *  psz_type 
)

Export a node of the playlist to a certain type of playlistfile.

Parameters:
p_playlist the playlist to export
psz_filename the location where the exported file will be saved
p_export_root the root node to export
psz_type the type of playlist file to create (m3u, pls, ..)
Returns:
VLC_SUCCESS on success

void playlist_FetcherLoop ( playlist_fetcher_t p_obj  ) 

Fetcher loop.

Main loop for secondary preparser queue

Parameters:
p_obj items to preparse
Returns:
nothing

playlist_item_t* playlist_GetLastLeaf ( playlist_t p_playlist,
playlist_item_t p_root 
)

playlist_item_t* playlist_GetNextLeaf ( playlist_t p_playlist,
playlist_item_t p_root,
playlist_item_t p_item,
bool  b_ena,
bool  b_unplayed 
)

Finds the next item to play.

Parameters:
p_playlist the playlist
p_root the root node
p_item the previous item (NULL if none )
Returns:
the next item to play, or NULL if none found

< Is it disabled ?

playlist_item_t* playlist_GetPreferredNode ( playlist_t p_playlist,
playlist_item_t p_node 
)

Get the node in the preferred tree from a node in one of category or onelevel tree.

playlist_item_t* playlist_GetPrevLeaf ( playlist_t p_playlist,
playlist_item_t p_root,
playlist_item_t p_item,
bool  b_ena,
bool  b_unplayed 
)

Finds the previous item to play.

Parameters:
p_playlist the playlist
p_root the root node
p_item the previous item (NULL if none )
Returns:
the next item to play, or NULL if none found

< Is it disabled ?

static int playlist_Import ( playlist_t p_playlist,
const char *  psz_file 
) [inline, static]

Open a playlist file, add its content to the current playlist.

bool playlist_IsServicesDiscoveryLoaded ( playlist_t ,
const char *   
)

Check whether a given SD is loaded.

playlist_item_t* playlist_ItemFindFromInputAndRoot ( playlist_t p_playlist,
int  i_input_id,
playlist_item_t p_root,
bool  b_items_only 
)

Find an item within a root, given its input id.

Parameters:
p_playlist the playlist object
i_input_id id of the input
p_root root playlist item
b_items_only TRUE if we want the item himself
Returns:
the first found item, or NULL if not found

playlist_item_t* playlist_ItemGetById ( playlist_t p_playlist,
int  i_id,
bool  b_locked 
)

Search a playlist item by its playlist_item id.

Parameters:
p_playlist the playlist
i_id the id to find
Returns:
the item or NULL on failure