* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
-#ifndef _VLC_PLAYLIST_H_
-#define _VLC_PLAYLIST_H_
+#ifndef VLC_PLAYLIST_H_
+#define VLC_PLAYLIST_H_
# ifdef __cplusplus
extern "C" {
{
VLC_COMMON_MEMBERS
- struct playlist_services_discovery_support_t {
- /* the playlist items for category and onelevel */
- playlist_item_t* p_cat;
- playlist_item_t* p_one;
- services_discovery_t * p_sd; /**< Loaded service discovery modules */
- } ** pp_sds;
- int i_sds; /**< Number of service discovery modules */
-
playlist_item_array_t items; /**< Arrays of items */
playlist_item_array_t all_items; /**< Array of items and nodes */
playlist_item_t * p_local_onelevel; /** < "Playlist" in ONELEVEL view */
playlist_item_t * p_ml_onelevel; /** < "Library" in ONELEVEL view */
- bool b_tree; /**< Display as a tree */
-
- bool b_doing_ml; /**< Doing media library stuff,
- * get quicker */
bool b_auto_preparse;
/* Runtime */
- input_thread_t * p_input; /**< the input thread associated
- * with the current item */
int i_sort; /**< Last sorting applied to the playlist */
int i_order; /**< Last ordering applied to the playlist */
mtime_t gc_date;
bool b_cant_sleep;
- playlist_preparse_t *p_preparse; /**< Preparser object */
- playlist_fetcher_t *p_fetcher;/**< Meta and art fetcher object */
-
- vlc_mutex_t gc_lock; /**< Lock to protect the garbage collection */
-
- struct {
- /* Current status. These fields are readonly, only the playlist
- * main loop can touch it*/
- playlist_status_t i_status; /**< Current status of playlist */
- playlist_item_t * p_item; /**< Currently playing/active item */
- playlist_item_t * p_node; /**< Current node to play from */
- } status;
-
- struct {
- /* Request. Use this to give orders to the playlist main loop */
- int i_status; /**< requested playlist status */
- playlist_item_t * p_node; /**< requested node to play from */
- playlist_item_t * p_item; /**< requested item to play in the node */
-
- int i_skip; /**< Number of items to skip */
-
- bool b_request;/**< Set to true by the requester
- The playlist sets it back to false
- when processing the request */
- vlc_mutex_t lock; /**< Lock to protect request */
- } request;
+
};
/** Helper to add an item */
#define SORT_TRACK_NUMBER 9
#define SORT_DESCRIPTION 10
#define SORT_RATING 11
+#define SORT_URI 12
#define ORDER_NORMAL 0
#define ORDER_REVERSE 1
#define PL_LOCK vlc_object_lock( p_playlist )
#define PL_UNLOCK vlc_object_unlock( p_playlist )
-VLC_EXPORT( playlist_t *, __pl_Yield, ( vlc_object_t * ) );
-#define pl_Yield( a ) __pl_Yield( VLC_OBJECT(a) )
+VLC_EXPORT( playlist_t *, __pl_Hold, ( vlc_object_t * ) );
+#define pl_Hold( a ) __pl_Hold( VLC_OBJECT(a) )
VLC_EXPORT( void, __pl_Release, ( vlc_object_t * ) );
#define pl_Release(a) __pl_Release( VLC_OBJECT(a) )
/** Request the art for an input item to be fetched */
VLC_EXPORT( int, playlist_AskForArtEnqueue, (playlist_t *, input_item_t *) );
-/********************** Services discovery ***********************/
-
-/** Add a list of comma-separated service discovery modules */
-VLC_EXPORT( int, playlist_ServicesDiscoveryAdd, (playlist_t *, const char *));
-/** Remove a services discovery module by name */
-VLC_EXPORT( int, playlist_ServicesDiscoveryRemove, (playlist_t *, const char *));
-/** Check whether a given SD is loaded */
-VLC_EXPORT( bool, playlist_IsServicesDiscoveryLoaded, ( playlist_t *,const char *));
-
/* Playlist sorting */
VLC_EXPORT( int, playlist_TreeMove, ( playlist_t *, playlist_item_t *, playlist_item_t *, int ) );
VLC_EXPORT( int, playlist_RecursiveNodeSort, ( playlist_t *, playlist_item_t *,int, int ) );
+VLC_EXPORT( playlist_item_t *, playlist_CurrentPlayingItem, ( playlist_t * ) );
+VLC_EXPORT( int, playlist_CurrentId, ( playlist_t * ) );
+VLC_EXPORT( bool, playlist_IsPlaying, ( playlist_t * ) );
+VLC_EXPORT( int, playlist_Status, ( playlist_t * ) );
+
/**
* Export a node of the playlist to a certain type of playlistfile
* \param p_playlist the playlist to export
*/
VLC_EXPORT( int, playlist_Export, ( playlist_t *p_playlist, const char *psz_name, playlist_item_t *p_export_root, const char *psz_type ) );
+/********************** Services discovery ***********************/
+
+/** Add a list of comma-separated service discovery modules */
+VLC_EXPORT( int, playlist_ServicesDiscoveryAdd, (playlist_t *, const char *));
+/** Remove a services discovery module by name */
+VLC_EXPORT( int, playlist_ServicesDiscoveryRemove, (playlist_t *, const char *));
+/** Check whether a given SD is loaded */
+VLC_EXPORT( bool, playlist_IsServicesDiscoveryLoaded, ( playlist_t *,const char *));
+
+
+
/********************************************************
* Item management
********************************************************/
/*************************** Item deletion **************************/
VLC_EXPORT( int, playlist_DeleteFromInput, ( playlist_t *, int, bool ) );
-VLC_EXPORT( int, playlist_DeleteFromInputInParent, ( playlist_t *, int, playlist_item_t *, bool ) );
/*************************** Item fields accessors **************************/
VLC_EXPORT( int, playlist_ItemSetName, (playlist_item_t *, const char * ) );
VLC_EXPORT( int, playlist_Add, ( playlist_t *, const char *, const char *, int, int, bool, bool ) );
VLC_EXPORT( int, playlist_AddExt, ( playlist_t *, const char *, const char *, int, int, mtime_t, const char *const *,int, bool, bool ) );
VLC_EXPORT( int, playlist_AddInput, ( playlist_t *, input_item_t *, int, int, bool, bool ) );
-VLC_EXPORT( playlist_item_t *, playlist_NodeAddInput, ( playlist_t *, input_item_t *,playlist_item_t *,int , int, bool ) );
VLC_EXPORT( int, playlist_BothAddInput, ( playlist_t *, input_item_t *,playlist_item_t *,int , int, int*, int*, bool ) );
/********************** Misc item operations **********************/
input_item_t *p_input;
snprintf( psz_uri, 256+9, "file/://%s", psz_file );
const char *const psz_option = "meta-file";
- p_input = input_ItemNewExt( p_playlist, psz_uri, psz_file,
+ p_input = input_item_NewExt( p_playlist, psz_uri, psz_file,
1, &psz_option, -1 );
playlist_AddInput( p_playlist, p_input, PLAYLIST_APPEND, PLAYLIST_END,
true, false );
#define pl_CurrentInput(a) __pl_CurrentInput( VLC_OBJECT(a) )
static inline input_thread_t * __pl_CurrentInput( vlc_object_t * p_this )
{
- playlist_t * p_playlist = pl_Yield( p_this );
+ playlist_t * p_playlist = pl_Hold( p_this );
if( !p_playlist ) return NULL;
input_thread_t * p_input = playlist_CurrentInput( p_playlist );
pl_Release( p_this );
return p_input;
}
-/** Tell if the playlist is currently running */
-#define playlist_IsPlaying( pl ) ( pl->status.i_status == PLAYLIST_RUNNING && \
- !(pl->request.b_request && pl->request.i_status == PLAYLIST_STOPPED) )
-
-#define playlist_IsStopped( pl ) ( pl->status.i_status == PLAYLIST_STOPPED || \
- (pl->request.b_request && pl->request.i_status == PLAYLIST_STOPPED) )
-
/** Tell if the playlist is empty */
#define playlist_IsEmpty( pl ) ( pl->items.i_size == 0 )
/** Tell the number of items in the current playing context */
#define playlist_CurrentSize( pl ) pl->current.i_size
-/** Tell the current item id in current playing context */
-#define playlist_CurrentId( pl ) pl->status.p_item->i_id
-
/** Ask the playlist to do some work */
#define playlist_Signal( p_playlist ) vlc_object_signal( p_playlist )