X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=include%2Fvlc_playlist.h;h=9e8321139d4f6d5b991e4c0520984f2bbe965a82;hb=4089ed51216810726a0ceeb48272ff42b247e67d;hp=032288c4f113eec32fabdcbb371511dfaff453e1;hpb=85ff1461a28b5ec29f881aaaa960a242750704fb;p=vlc diff --git a/include/vlc_playlist.h b/include/vlc_playlist.h index 032288c4f1..9e8321139d 100644 --- a/include/vlc_playlist.h +++ b/include/vlc_playlist.h @@ -32,8 +32,9 @@ extern "C" { # endif -#include #include +#include +#include #include #include @@ -69,7 +70,7 @@ TYPEDEF_ARRAY(input_item_t*, input_item_array_t); * it only contains "real" items, not nodes * For example, if you open a directory, you will have *\verbatim - * Category tree: Onevelel tree: + * Category tree: Onelevel tree: * Playlist Playlist * - Dir - item1 * - Subdir - item2 @@ -93,7 +94,7 @@ TYPEDEF_ARRAY(input_item_t*, input_item_array_t); * - input 1 -> name = foo 1 uri = ... * - input 2 -> name = foo 2 uri = ... * - * Category tree Onlevel tree + * Category tree Onelevel tree * - playlist (id 1) - playlist (id 3) * - category 1 (id 2) - foo 2 (id 8 - input 2) * - foo 2 (id 6 - input 2) - media library (id 4) @@ -143,6 +144,7 @@ struct playlist_item_t int i_id; /**< Playlist item specific id */ uint8_t i_flags; /**< Flags */ + playlist_t *p_playlist; /**< Parent playlist */ }; #define PLAYLIST_SAVE_FLAG 0x0001 /**< Must it be saved */ @@ -156,22 +158,19 @@ struct playlist_item_t typedef enum { PLAYLIST_STOPPED,PLAYLIST_RUNNING,PLAYLIST_PAUSED } playlist_status_t; - -struct services_discovery_t -{ - VLC_COMMON_MEMBERS - char *psz_module; - - module_t *p_module; - - services_discovery_sys_t *p_sys; - void (*pf_run) ( services_discovery_t *); -}; - /** Structure containing information about the playlist */ struct playlist_t { 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 */ + int i_enabled; /**< How many items are enabled ? */ playlist_item_array_t items; /**< Arrays of items */ @@ -188,22 +187,19 @@ struct playlist_t int i_last_playlist_id; /**< Last id to an item */ int i_last_input_id ; /**< Last id on an input */ - services_discovery_t **pp_sds; /**< Loaded service discovery modules */ - int i_sds; /**< Number of service discovery modules */ - /* Predefined items */ playlist_item_t * p_root_category; /**< Root of category tree */ playlist_item_t * p_root_onelevel; /**< Root of onelevel tree */ playlist_item_t * p_local_category; /** < "Playlist" in CATEGORY view */ playlist_item_t * p_ml_category; /** < "Library" in CATEGORY view */ playlist_item_t * p_local_onelevel; /** < "Playlist" in ONELEVEL view */ - playlist_item_t * p_ml_onelevel; /** < "Library" in ONELEVEL iew */ + playlist_item_t * p_ml_onelevel; /** < "Library" in ONELEVEL view */ vlc_bool_t b_always_tree;/**< Always display as tree */ vlc_bool_t b_never_tree;/**< Never display as tree */ - vlc_bool_t b_doing_ml; /**< Doing media library stuff, */ - /*get quicker */ + vlc_bool_t b_doing_ml; /**< Doing media library stuff, + * get quicker */ vlc_bool_t b_auto_preparse; /* Runtime */ @@ -263,6 +259,9 @@ struct playlist_add_t #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 @@ -272,18 +271,16 @@ struct playlist_add_t *****************************************************************************/ /* Helpers */ -#define PL_LOCK vlc_mutex_lock( &p_playlist->object_lock ); -#define PL_UNLOCK vlc_mutex_unlock( &p_playlist->object_lock ); +#define PL_LOCK vlc_object_lock( p_playlist ) +#define PL_UNLOCK vlc_object_unlock( p_playlist ) #define pl_Get( a ) a->p_libvlc->p_playlist + +VLC_EXPORT( playlist_t *, __pl_Yield, ( vlc_object_t * ) ); #define pl_Yield( a ) __pl_Yield( VLC_OBJECT(a) ) -static inline playlist_t *__pl_Yield( vlc_object_t *p_this ) -{ - assert( p_this->p_libvlc->p_playlist ); - vlc_object_yield( p_this->p_libvlc->p_playlist ); - return p_this->p_libvlc->p_playlist; -} -#define pl_Release(a) vlc_object_release( a->p_libvlc->p_playlist ); + +VLC_EXPORT( void, __pl_Release, ( vlc_object_t * ) ); +#define pl_Release(a) __pl_Release( VLC_OBJECT(a) ) /* Playlist control */ #define playlist_Play(p) playlist_Control(p,PLAYLIST_PLAY, VLC_FALSE ) @@ -363,6 +360,7 @@ VLC_EXPORT( playlist_item_t *, __playlist_ItemNewFromInput, ( vlc_object_t *p_ob /*************************** Item deletion **************************/ VLC_EXPORT( int, playlist_DeleteFromInput, ( playlist_t *, int, vlc_bool_t ) ); +VLC_EXPORT( int, playlist_DeleteInputInParent, ( playlist_t *, int, playlist_item_t *, vlc_bool_t ) ); /*************************** Item fields accessors **************************/ VLC_EXPORT( int, playlist_ItemSetName, (playlist_item_t *, const char * ) ); @@ -395,7 +393,7 @@ VLC_EXPORT(void, playlist_NodeDump, ( playlist_t *p_playlist, playlist_item_t *p VLC_EXPORT( int, playlist_NodeChildrenCount, (playlist_t *,playlist_item_t* ) ); /* Node management */ -VLC_EXPORT( playlist_item_t *, playlist_NodeCreate, ( playlist_t *, const char *, playlist_item_t * p_parent, int i_flags ) ); +VLC_EXPORT( playlist_item_t *, playlist_NodeCreate, ( playlist_t *, const char *, playlist_item_t * p_parent, int i_flags, input_item_t * ) ); VLC_EXPORT( int, playlist_NodeAppend, (playlist_t *,playlist_item_t*,playlist_item_t *) ); VLC_EXPORT( int, playlist_NodeInsert, (playlist_t *,playlist_item_t*,playlist_item_t *, int) ); VLC_EXPORT( int, playlist_NodeRemoveItem, (playlist_t *,playlist_item_t*,playlist_item_t *) ); @@ -404,16 +402,22 @@ VLC_EXPORT( int, playlist_NodeDelete, ( playlist_t *, playlist_item_t *, vlc_boo VLC_EXPORT( int, playlist_NodeEmpty, ( playlist_t *, playlist_item_t *, vlc_bool_t ) ); VLC_EXPORT( void, playlist_NodesPairCreate, (playlist_t *, const char *, playlist_item_t **, playlist_item_t **, vlc_bool_t ) ); VLC_EXPORT( playlist_item_t *, playlist_GetPreferredNode, ( playlist_t *p_playlist, playlist_item_t *p_node ) ); +VLC_EXPORT( playlist_item_t *, playlist_GetNextLeaf, ( playlist_t *p_playlist, playlist_item_t *p_root, playlist_item_t *p_item, vlc_bool_t b_ena, vlc_bool_t b_unplayed ) ); +VLC_EXPORT( playlist_item_t *, playlist_GetPrevLeaf, ( playlist_t *p_playlist, playlist_item_t *p_root, playlist_item_t *p_item, vlc_bool_t b_ena, vlc_bool_t b_unplayed ) ); +VLC_EXPORT( playlist_item_t *, playlist_GetLastLeaf, ( playlist_t *p_playlist, playlist_item_t *p_root ) ); /*********************************************************************** * Inline functions ***********************************************************************/ /** Open a playlist file, add its content to the current playlist */ -static inline int playlist_Import( playlist_t *p_playlist, const char *psz_file){ +static inline int playlist_Import( playlist_t *p_playlist, const char *psz_file) +{ char psz_uri[256+10]; input_item_t *p_input; snprintf( psz_uri, 256+9, "file/://%s", psz_file ); - p_input = input_ItemNewExt( p_playlist, psz_uri, psz_file, 0, NULL, -1 ); + const char *const psz_option = "meta-file"; + p_input = input_ItemNewExt( p_playlist, psz_uri, psz_file, + 1, &psz_option, -1 ); playlist_AddInput( p_playlist, p_input, PLAYLIST_APPEND, PLAYLIST_END, VLC_TRUE, VLC_FALSE ); input_Read( p_playlist, p_input, VLC_TRUE ); @@ -430,12 +434,7 @@ static inline int playlist_Import( playlist_t *p_playlist, const char *psz_file) #define playlist_CurrentSize( obj ) obj->p_libvlc->p_playlist->current.i_size /** Ask the playlist to do some work */ -static inline void playlist_Signal( playlist_t *p_playlist ) -{ - PL_LOCK; - vlc_cond_signal( &p_playlist->object_wait ); - PL_UNLOCK; -} +#define playlist_Signal( p_playlist ) vlc_object_signal( p_playlist ) /** @} */ # ifdef __cplusplus