QVisu
Qt-based visualization for smart homes
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
Playlist

Classes

struct  playlist_export_t
 
struct  playlist_item_t
 
struct  playlist_t
 
struct  playlist_add_t
 

Macros

#define VLC_DEFINE_SORT_FUNCTIONS
 
#define DEF(s)   s,
 
#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   playlist_Lock( p_playlist )
 
#define PL_UNLOCK   playlist_Unlock( p_playlist )
 
#define PL_ASSERT_LOCKED   playlist_AssertLocked( p_playlist )
 
#define pl_Get(a)   pl_Get( 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 AOUT_VOLUME_DEFAULT   256
 
#define AOUT_VOLUME_MAX   512
 
#define playlist_VolumeDown(a, b, c)   playlist_VolumeUp(a, -(b), c)
 
#define pl_CurrentInput(a)   __pl_CurrentInput( VLC_OBJECT(a) )
 

Typedefs

typedef struct playlist_export_t playlist_export_t
 

Enumerations

enum  playlist_item_flags_e {
  PLAYLIST_SAVE_FLAG = 0x0001, PLAYLIST_SKIP_FLAG = 0x0002, PLAYLIST_DBL_FLAG = 0x0004, PLAYLIST_RO_FLAG = 0x0008,
  PLAYLIST_REMOVE_FLAG = 0x0010, PLAYLIST_EXPANDED_FLAG = 0x0020, PLAYLIST_SUBITEM_STOP_FLAG = 0x0040
}
 
enum  playlist_status_t { PLAYLIST_STOPPED, PLAYLIST_RUNNING, PLAYLIST_PAUSED }
 
enum  { SORT_RANDOM, NUM_SORT_FNS =SORT_RANDOM }
 
enum  { ORDER_NORMAL = 0, ORDER_REVERSE = 1 }
 
enum  pl_locked_state { pl_Locked = true, pl_Unlocked = false }
 

Functions

VLC_API playlist_tpl_Get (vlc_object_t *)
 
VLC_API void playlist_Lock (playlist_t *)
 
VLC_API void playlist_Unlock (playlist_t *)
 
VLC_API void playlist_AssertLocked (playlist_t *)
 
VLC_API void playlist_Deactivate (playlist_t *)
 
VLC_API int playlist_Control (playlist_t *p_playlist, int i_query, bool b_locked,...)
 
VLC_API input_thread_tplaylist_CurrentInput (playlist_t *p_playlist) VLC_USED
 
VLC_API mtime_t playlist_GetNodeDuration (playlist_item_t *)
 
VLC_API void playlist_Clear (playlist_t *, bool)
 
VLC_API int playlist_PreparseEnqueue (playlist_t *, input_item_t *)
 
VLC_API int playlist_AskForArtEnqueue (playlist_t *, input_item_t *)
 
VLC_API int playlist_TreeMove (playlist_t *, playlist_item_t *, playlist_item_t *, int)
 
VLC_API int playlist_TreeMoveMany (playlist_t *, int, playlist_item_t **, playlist_item_t *, int)
 
VLC_API int playlist_RecursiveNodeSort (playlist_t *, playlist_item_t *, int, int)
 
VLC_API playlist_item_tplaylist_CurrentPlayingItem (playlist_t *) VLC_USED
 
VLC_API int playlist_Status (playlist_t *)
 
VLC_API int playlist_Export (playlist_t *p_playlist, const char *psz_name, playlist_item_t *p_export_root, const char *psz_type)
 
VLC_API int playlist_Import (playlist_t *p_playlist, const char *psz_file)
 
VLC_API int playlist_ServicesDiscoveryAdd (playlist_t *, const char *)
 
VLC_API int playlist_ServicesDiscoveryRemove (playlist_t *, const char *)
 
VLC_API bool playlist_IsServicesDiscoveryLoaded (playlist_t *, const char *) VLC_DEPRECATED
 
VLC_API int playlist_ServicesDiscoveryControl (playlist_t *, const char *, int,...)
 
VLC_API int playlist_DeleteFromInput (playlist_t *, input_item_t *, bool)
 
VLC_API int playlist_Add (playlist_t *, const char *, const char *, int, int, bool, bool)
 
VLC_API int playlist_AddExt (playlist_t *, const char *, const char *, int, int, mtime_t, int, const char *const *, unsigned, bool, bool)
 
VLC_API int playlist_AddInput (playlist_t *, input_item_t *, int, int, bool, bool)
 
VLC_API playlist_item_tplaylist_NodeAddInput (playlist_t *, input_item_t *, playlist_item_t *, int, int, bool)
 
VLC_API int playlist_NodeAddCopy (playlist_t *, playlist_item_t *, playlist_item_t *, int)
 
VLC_API playlist_item_tplaylist_ItemGetById (playlist_t *, int) VLC_USED
 
VLC_API playlist_item_tplaylist_ItemGetByInput (playlist_t *, input_item_t *) VLC_USED
 
VLC_API int playlist_LiveSearchUpdate (playlist_t *, playlist_item_t *, const char *, bool)
 
VLC_API playlist_item_tplaylist_NodeCreate (playlist_t *, const char *, playlist_item_t *p_parent, int i_pos, int i_flags, input_item_t *)
 
VLC_API int playlist_NodeAppend (playlist_t *, playlist_item_t *, playlist_item_t *)
 
VLC_API int playlist_NodeInsert (playlist_t *, playlist_item_t *, playlist_item_t *, int)
 
VLC_API int playlist_NodeRemoveItem (playlist_t *, playlist_item_t *, playlist_item_t *)
 
VLC_API playlist_item_tplaylist_ChildSearchName (playlist_item_t *, const char *) VLC_USED
 
VLC_API int playlist_NodeDelete (playlist_t *, playlist_item_t *, bool, bool)
 
VLC_API playlist_item_tplaylist_GetNextLeaf (playlist_t *p_playlist, playlist_item_t *p_root, playlist_item_t *p_item, bool b_ena, bool b_unplayed) VLC_USED
 
VLC_API playlist_item_tplaylist_GetPrevLeaf (playlist_t *p_playlist, playlist_item_t *p_root, playlist_item_t *p_item, bool b_ena, bool b_unplayed) VLC_USED
 
VLC_API audio_output_tplaylist_GetAout (playlist_t *)
 
VLC_API float playlist_VolumeGet (playlist_t *)
 
VLC_API int playlist_VolumeSet (playlist_t *, float)
 
VLC_API int playlist_VolumeUp (playlist_t *, int, float *)
 
VLC_API int playlist_MuteSet (playlist_t *, bool)
 
VLC_API int playlist_MuteGet (playlist_t *)
 
VLC_API void playlist_EnableAudioFilter (playlist_t *, const char *, bool)
 

Detailed Description

The VLC playlist system has a tree structure. This allows advanced categorization, like for SAP streams (which are grouped by "sap groups").

The base structure for all playlist operations is the input_item_t. This contains all information needed to play a stream and get info, ie, mostly, mrl and metadata. This structure contains a unique i_id field. ids are not recycled when an item is destroyed.

Input items are not used directly, but through playlist items. The playlist items are themselves in a tree structure. They only contain a link to the input item, a unique id and a few flags. the playlist item id is NOT the same as the input item id. Several playlist items can be attached to a single input item. The input item is refcounted and is automatically destroyed when it is not used anymore.

The top-level items are the main media sources and include: playlist, media library, SAP, Shoutcast, devices, ...

It is envisioned that a third tree will appear: VLM, but it's not done yet

The playlist also stores, for utility purposes, an array of all input items, an array of all playlist items and an array of all playlist items and nodes (both are represented by the same structure).

So, here is an example:

* Inputs array
*  - input 1 -> name = foo 1 uri = ...
*  - input 2 -> name = foo 2 uri = ...
*
* Playlist items tree
* - playlist (id 1)
*    - category 1 (id 2)
*      - foo 2 (id 6 - input 2)
* - media library (id 2)
*    - foo 1 (id 5 - input 1)
* 

Sometimes, an item creates subitems. This happens for the directory access for example. In that case, if the item is under the "playlist" top-level item and playlist is configured to be flat then the item will be deleted and replaced with new subitems. If the item is under another top-level item, it will be transformed to a node and removed from the list of all items without nodes.

For "standard" item addition, you can use playlist_Add, playlist_AddExt (more options) or playlist_AddInput if you already created your input item. This will add the item at the root of "Playlist" or of "Media library" in each of the two trees.

You can create nodes with playlist_NodeCreate and can create items from existing input items to be placed under any node with playlist_NodeAddInput.

To delete an item, use playlist_DeleteFromInput( p_item ) which will remove all occurrences of the input.

The playlist defines the following event variables:

The playlist contains rate-variable which is propagated to current input if available also rate-slower/rate-faster is in use

XXX Be really carefull, playlist_item_t->i_id and input_item_t->i_id are not the same. Yes, the situation is pretty bad.

Macro Definition Documentation

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

Small helper tp get current playing input or NULL. Release the input after use.

#define VLC_DEFINE_SORT_FUNCTIONS
Value:
DEF( SORT_ID )\
DEF( SORT_TITLE )\
DEF( SORT_TITLE_NODES_FIRST )\
DEF( SORT_ARTIST )\
DEF( SORT_GENRE )\
DEF( SORT_DURATION )\
DEF( SORT_TITLE_NUMERIC )\
DEF( SORT_ALBUM )\
DEF( SORT_TRACK_NUMBER )\
DEF( SORT_DESCRIPTION )\
DEF( SORT_RATING )\
DEF( SORT_URI )

Typedef Documentation

Helper structure to export to file part of the playlist

Enumeration Type Documentation

Enumerator
PLAYLIST_SAVE_FLAG 

Must it be saved

PLAYLIST_SKIP_FLAG 

Must playlist skip after it ?

PLAYLIST_DBL_FLAG 

Is it disabled ?

PLAYLIST_RO_FLAG 

Write-enabled ?

PLAYLIST_REMOVE_FLAG 

Remove this item at the end

PLAYLIST_EXPANDED_FLAG 

Expanded node

PLAYLIST_SUBITEM_STOP_FLAG 

Must playlist stop if the item gets subitems ?

Playlist status

Function Documentation

VLC_API int playlist_AskForArtEnqueue ( playlist_t ,
input_item_t  
)

Request the art for an input item to be fetched

VLC_API void playlist_Clear ( playlist_t ,
bool   
)

Clear the playlist

Parameters
b_lockedTRUE if playlist is locked when entering this function
VLC_API 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_playlistthe playlist to do the command on
i_querythe command to do
b_lockedTRUE if playlist is locked when entering this function
variablenumber of arguments
Returns
VLC_SUCCESS or an error
VLC_API input_thread_t* playlist_CurrentInput ( playlist_t p_playlist)

Get current playing input. The object is retained.

VLC_API 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_playlistthe playlist to export
psz_filenamethe location where the exported file will be saved
p_export_rootthe root node to export
psz_typethe type of playlist file to create (m3u, pls, ..)
Returns
VLC_SUCCESS on success
VLC_API mtime_t playlist_GetNodeDuration ( playlist_item_t )

Get the duration of all items in a node.

VLC_API int playlist_Import ( playlist_t p_playlist,
const char *  psz_file 
)

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

VLC_API bool playlist_IsServicesDiscoveryLoaded ( playlist_t ,
const char *   
)

Check whether a given SD is loaded

VLC_API int playlist_PreparseEnqueue ( playlist_t ,
input_item_t  
)

Enqueue an input item for preparsing

VLC_API int playlist_ServicesDiscoveryAdd ( playlist_t ,
const char *   
)

Add a list of comma-separated service discovery modules

VLC_API int playlist_ServicesDiscoveryControl ( playlist_t ,
const char *  ,
int  ,
  ... 
)

Query a services discovery

VLC_API int playlist_ServicesDiscoveryRemove ( playlist_t ,
const char *   
)

Remove a services discovery module by name