X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=include%2Fvlc_playlist.h;h=aabd612ff6ac0dadfd49356cf3c4f0100bef56e7;hb=744adcaa056f0c8051d8db9311bb0e4220a31d1f;hp=770e1a9dd592f134258449a9289c41ab5a4d1e34;hpb=2b819bc143a141ae1d544860c023a730c41ec863;p=vlc diff --git a/include/vlc_playlist.h b/include/vlc_playlist.h index 770e1a9dd5..aabd612ff6 100644 --- a/include/vlc_playlist.h +++ b/include/vlc_playlist.h @@ -1,7 +1,7 @@ /***************************************************************************** * vlc_playlist.h : Playlist functions ***************************************************************************** - * Copyright (C) 1999-2004 VideoLAN + * Copyright (C) 1999-2004 the VideoLAN team * $Id$ * * Authors: Samuel Hocevar @@ -79,10 +79,12 @@ struct playlist_item_t /* END LEGACY FIELDS */ }; -#define PLAYLIST_SAVE_FLAG 0x1 /**< Must it be saved */ -#define PLAYLIST_SKIP_FLAG 0x2 /**< Must playlist skip after it ? */ -#define PLAYLIST_ENA_FLAG 0x4 /**< Is it enabled ? */ -#define PLAYLIST_DEL_FLAG 0x8 /**< Autodelete ? */ +#define PLAYLIST_SAVE_FLAG 0x01 /**< Must it be saved */ +#define PLAYLIST_SKIP_FLAG 0x02 /**< Must playlist skip after it ? */ +#define PLAYLIST_ENA_FLAG 0x04 /**< Is it enabled ? */ +#define PLAYLIST_DEL_FLAG 0x08 /**< Autodelete ? */ +#define PLAYLIST_RO_FLAG 0x10 /**< Write-enabled ? */ +#define PLAYLIST_REMOVE_FLAG 0x20 /**< Remove this item at the end */ /** * playlist view @@ -105,8 +107,10 @@ struct playlist_view_t #define VIEW_ALL 3 #define VIEW_FIRST_SORTED 4 #define VIEW_S_AUTHOR 4 +#define VIEW_S_GENRE 5 +#define VIEW_S_ALBUM 6 -#define VIEW_LAST_SORTED 4 +#define VIEW_LAST_SORTED 10 #define VIEW_FIRST_CUSTOM 100 @@ -119,7 +123,7 @@ typedef enum { PLAYLIST_STOPPED,PLAYLIST_RUNNING,PLAYLIST_PAUSED } playlist_stat struct services_discovery_t { VLC_COMMON_MEMBERS - const char *psz_module; + char *psz_module; module_t *p_module; @@ -127,6 +131,14 @@ struct services_discovery_t void (*pf_run) ( services_discovery_t *); }; +struct playlist_preparse_t +{ + VLC_COMMON_MEMBERS + vlc_mutex_t lock; + int i_waiting; + input_item_t **pp_waiting; +}; + /** * Structure containing information about the playlist @@ -145,6 +157,9 @@ struct playlist_t int i_size; /**< total size of the list */ playlist_item_t ** pp_items; /**< array of pointers to the * playlist items */ + int i_all_size; /**< size of list of items and nodes */ + playlist_item_t ** pp_all_items; /**< array of pointers to the + * playlist items and nodes */ int i_views; /**< Number of views */ playlist_view_t ** pp_views; /**< array of pointers to the @@ -191,17 +206,21 @@ struct playlist_t vlc_bool_t 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 */ + vlc_mutex_t lock; /**< Lock to protect request */ } request; + playlist_preparse_t *p_preparse; + + vlc_mutex_t gc_lock; /**< Lock to protect the garbage collection */ + /*@}*/ }; /* Helper to add an item */ struct playlist_add_t { - playlist_item_t *p_node; - playlist_item_t *p_item; + int i_node; + int i_item; int i_view; int i_position; }; @@ -210,8 +229,11 @@ struct playlist_add_t #define SORT_TITLE 1 #define SORT_TITLE_NODES_FIRST 2 #define SORT_AUTHOR 3 -#define SORT_RANDOM 4 -#define SORT_DURATION 5 +#define SORT_GENRE 4 +#define SORT_RANDOM 5 +#define SORT_DURATION 6 +#define SORT_TITLE_NUMERIC 7 +#define SORT_ALBUM 8 #define ORDER_NORMAL 0 #define ORDER_REVERSE 1 @@ -226,18 +248,22 @@ playlist_t * __playlist_Create ( vlc_object_t * ); int playlist_Destroy ( playlist_t * ); /* Playlist control */ -#define playlist_Play(p) playlist_Control(p,PLAYLIST_PLAY ) -#define playlist_Pause(p) playlist_Control(p,PLAYLIST_PAUSE ) -#define playlist_Stop(p) playlist_Control(p,PLAYLIST_STOP ) -#define playlist_Next(p) playlist_Control(p,PLAYLIST_SKIP , 1) -#define playlist_Prev(p) playlist_Control(p,PLAYLIST_SKIP , -1) -#define playlist_Skip(p,i) playlist_Control(p,PLAYLIST_SKIP,i) -#define playlist_Goto(p,i) playlist_Control(p,PLAYLIST_GOTO,i) +#define playlist_Play(p) playlist_LockControl(p,PLAYLIST_PLAY ) +#define playlist_Pause(p) playlist_LockControl(p,PLAYLIST_PAUSE ) +#define playlist_Stop(p) playlist_LockControl(p,PLAYLIST_STOP ) +#define playlist_Next(p) playlist_LockControl(p,PLAYLIST_SKIP, 1) +#define playlist_Prev(p) playlist_LockControl(p,PLAYLIST_SKIP, -1) +#define playlist_Skip(p,i) playlist_LockControl(p,PLAYLIST_SKIP, i) +#define playlist_Goto(p,i) playlist_LockControl(p,PLAYLIST_GOTO, i) VLC_EXPORT( int, playlist_Control, ( playlist_t *, int, ... ) ); +VLC_EXPORT( int, playlist_LockControl, ( playlist_t *, int, ... ) ); VLC_EXPORT( int, playlist_Clear, ( playlist_t * ) ); +VLC_EXPORT( int, playlist_LockClear, ( playlist_t * ) ); +VLC_EXPORT( int, playlist_PreparseEnqueue, (playlist_t *, input_item_t *) ); +VLC_EXPORT( int, playlist_PreparseEnqueueItem, (playlist_t *, playlist_item_t *) ); /* Services discovery */ @@ -250,7 +276,10 @@ VLC_EXPORT( vlc_bool_t, playlist_IsServicesDiscoveryLoaded, ( playlist_t *,const /* Item management functions (act on items) */ #define playlist_AddItem(p,pi,i1,i2) playlist_ItemAdd(p,pi,i1,i2) #define playlist_ItemNew( a , b, c ) __playlist_ItemNew(VLC_OBJECT(a) , b , c ) +#define playlist_ItemCopy( a, b ) __playlist_ItemCopy(VLC_OBJECT(a), b ) VLC_EXPORT( playlist_item_t* , __playlist_ItemNew, ( vlc_object_t *,const char *,const char * ) ); +VLC_EXPORT( playlist_item_t* , __playlist_ItemCopy, ( vlc_object_t *,playlist_item_t* ) ); +VLC_EXPORT( playlist_item_t* , playlist_ItemNewWithType, ( vlc_object_t *,const char *,const char *, int ) ); VLC_EXPORT( int, playlist_ItemDelete, ( playlist_item_t * ) ); VLC_EXPORT( int, playlist_ItemAddParent, ( playlist_item_t *, int,playlist_item_t *) ); VLC_EXPORT( int, playlist_CopyParents, ( playlist_item_t *,playlist_item_t *) ); @@ -272,12 +301,12 @@ VLC_EXPORT( playlist_item_t *, playlist_NodeCreate, ( playlist_t *,int,char *, p VLC_EXPORT( int, playlist_NodeAppend, (playlist_t *,int,playlist_item_t*,playlist_item_t *) ); VLC_EXPORT( int, playlist_NodeInsert, (playlist_t *,int,playlist_item_t*,playlist_item_t *, int) ); VLC_EXPORT( int, playlist_NodeRemoveItem, (playlist_t *,playlist_item_t*,playlist_item_t *) ); +VLC_EXPORT( int, playlist_NodeRemoveParent, (playlist_t *,playlist_item_t*,playlist_item_t *) ); VLC_EXPORT( int, playlist_NodeChildrenCount, (playlist_t *,playlist_item_t* ) ); VLC_EXPORT( playlist_item_t *, playlist_ChildSearchName, (playlist_item_t*, const char* ) ); -VLC_EXPORT( int, playlist_NodeDelete, ( playlist_t *, playlist_item_t *, vlc_bool_t ) ); +VLC_EXPORT( int, playlist_NodeDelete, ( playlist_t *, playlist_item_t *, vlc_bool_t , vlc_bool_t ) ); VLC_EXPORT( int, playlist_NodeEmpty, ( playlist_t *, playlist_item_t *, vlc_bool_t ) ); - /* Tree walking */ playlist_item_t *playlist_FindNextFromParent( playlist_t *p_playlist, int i_view, @@ -300,39 +329,37 @@ VLC_EXPORT(int, playlist_NodeAddItem, ( playlist_t *, playlist_item_t *,int,play /* Misc item operations (act on item+playlist) */ VLC_EXPORT( int, playlist_Delete, ( playlist_t *, int ) ); +VLC_EXPORT( int, playlist_LockDelete, ( playlist_t *, int ) ); VLC_EXPORT( int, playlist_Disable, ( playlist_t *, playlist_item_t * ) ); VLC_EXPORT( int, playlist_Enable, ( playlist_t *, playlist_item_t * ) ); VLC_EXPORT( int, playlist_ItemToNode, (playlist_t *,playlist_item_t *) ); +VLC_EXPORT( int, playlist_LockItemToNode, (playlist_t *,playlist_item_t *) ); VLC_EXPORT( int, playlist_Replace, (playlist_t *,playlist_item_t *, input_item_t*) ); +VLC_EXPORT( int, playlist_LockReplace, (playlist_t *,playlist_item_t *, input_item_t*) ); /* Item search functions */ VLC_EXPORT( playlist_item_t *, playlist_ItemGetById, (playlist_t *, int) ); +VLC_EXPORT( playlist_item_t *, playlist_LockItemGetById, (playlist_t *, int) ); VLC_EXPORT( playlist_item_t *, playlist_ItemGetByPos, (playlist_t *, int) ); -VLC_EXPORT( int, playlist_GetPositionById, (playlist_t *,int ) ); +VLC_EXPORT( playlist_item_t *, playlist_LockItemGetByPos, (playlist_t *, int) ); VLC_EXPORT( playlist_item_t *, playlist_ItemGetByInput, (playlist_t *,input_item_t * ) ); +VLC_EXPORT( playlist_item_t *, playlist_LockItemGetByInput, (playlist_t *,input_item_t * ) ); +VLC_EXPORT( int, playlist_GetPositionById, (playlist_t *,int ) ); -/* Info functions */ -VLC_EXPORT( char * , playlist_GetInfo, ( playlist_t * , int, const char *, const char *) ); -VLC_EXPORT( char * , playlist_ItemGetInfo, ( playlist_item_t * , const char *, const char *) ); - -VLC_EXPORT( info_category_t*, playlist_ItemGetCategory, ( playlist_item_t *, const char *) ); - -VLC_EXPORT( info_category_t*, playlist_ItemCreateCategory, ( playlist_item_t *, const char *) ); - -VLC_EXPORT( int, playlist_AddInfo, (playlist_t *, int, const char * , const char *, const char *, ...) ); -VLC_EXPORT( int, playlist_ItemAddInfo, (playlist_item_t *, const char * , const char *, const char *, ...) ); VLC_EXPORT( int, playlist_ItemAddOption, (playlist_item_t *, const char *) ); /* Playlist sorting */ #define playlist_SortID(p, i) playlist_Sort( p, SORT_ID, i) #define playlist_SortTitle(p, i) playlist_Sort( p, SORT_TITLE, i) #define playlist_SortAuthor(p, i) playlist_Sort( p, SORT_AUTHOR, i) +#define playlist_SortAlbum(p, i) playlist_Sort( p, SORT_ALBUM, i) #define playlist_SortGroup(p, i) playlist_Sort( p, SORT_GROUP, i) VLC_EXPORT( int, playlist_Sort, ( playlist_t *, int, int) ); VLC_EXPORT( int, playlist_Move, ( playlist_t *, int, int ) ); VLC_EXPORT( int, playlist_NodeGroup, ( playlist_t *, int,playlist_item_t *,playlist_item_t **,int, int, int ) ); VLC_EXPORT( int, playlist_NodeSort, ( playlist_t *, playlist_item_t *,int, int ) ); +VLC_EXPORT( int, playlist_RecursiveNodeSort, ( playlist_t *, playlist_item_t *,int, int ) ); /* Load/Save */ VLC_EXPORT( int, playlist_Import, ( playlist_t *, const char * ) ); @@ -375,6 +402,8 @@ static inline vlc_bool_t playlist_IsEmpty( playlist_t * p_playlist ) return( b_empty ); } + + /** * @} */