X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fplaylist%2Fplaylist_internal.h;h=6ea98a2743174f452e442667e5ba501856caf9bc;hb=0d5db2b480afaff6141bb90b47856018a6e8576c;hp=dca7ab2470eba77b86b40801b71e206870f4b1fd;hpb=449fd28aaf007c6411251dae9d0dbfdc65b135d1;p=vlc diff --git a/src/playlist/playlist_internal.h b/src/playlist/playlist_internal.h index dca7ab2470..6ea98a2743 100644 --- a/src/playlist/playlist_internal.h +++ b/src/playlist/playlist_internal.h @@ -35,6 +35,7 @@ */ #include "input/input_internal.h" +#include struct playlist_preparse_t { @@ -44,20 +45,13 @@ struct playlist_preparse_t input_item_t **pp_waiting; }; -typedef struct preparse_item_t -{ - input_item_t *p_item; - bool b_fetch_art; -} preparse_item_t; - struct playlist_fetcher_t { VLC_COMMON_MEMBERS vlc_mutex_t lock; int i_art_policy; - bool b_fetch_meta; int i_waiting; - preparse_item_t *p_waiting; + input_item_t **pp_waiting; DECL_ARRAY(playlist_album_t) albums; }; @@ -69,11 +63,12 @@ struct playlist_fetcher_t /* Global thread */ #define playlist_ThreadCreate(a) __playlist_ThreadCreate(VLC_OBJECT(a)) void __playlist_ThreadCreate ( vlc_object_t * ); -int playlist_ThreadDestroy ( playlist_t * ); + +playlist_item_t *playlist_ItemNewFromInput( playlist_t *p_playlist, + input_item_t *p_input ); /* Creation/Deletion */ playlist_t *playlist_Create ( vlc_object_t * ); -void playlist_Destroy ( playlist_t * ); /* Engine */ void playlist_MainLoop( playlist_t * ); @@ -83,6 +78,11 @@ void playlist_FetcherLoop( playlist_fetcher_t * ); void ResetCurrentlyPlaying( playlist_t *, bool, playlist_item_t * ); +playlist_item_t * get_current_status_item( playlist_t * p_playlist); +playlist_item_t * get_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 * ); + /* Control */ playlist_item_t * playlist_NextItem ( playlist_t * ); int playlist_PlayItem ( playlist_t *, playlist_item_t * ); @@ -98,21 +98,21 @@ 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 ); +playlist_item_t * playlist_NodeAddInput( playlist_t *, input_item_t *, + playlist_item_t *,int , int, bool ); + /* Tree walking */ -int playlist_GetAllEnabledChildren( playlist_t *p_playlist, - playlist_item_t *p_node, - playlist_item_t ***ppp_items ); -playlist_item_t *playlist_GetNextLeaf( playlist_t *p_playlist, - playlist_item_t *p_root, - playlist_item_t *, bool, bool ); -playlist_item_t *playlist_GetPrevLeaf( playlist_t *p_playlist, - playlist_item_t *p_root, - playlist_item_t *, bool, bool ); -playlist_item_t *playlist_GetLastLeaf( playlist_t *p_playlist, - playlist_item_t *p_root ); +playlist_item_t *playlist_ItemFindFromInputAndRoot( playlist_t *p_playlist, + int i_input_id, playlist_item_t *p_root, + bool ); +int playlist_DeleteFromInputInParent( playlist_t *, int, playlist_item_t *, bool ); int playlist_DeleteFromItemId( playlist_t*, int ); -int playlist_ItemDelete ( playlist_item_t * ); +int playlist_ItemRelease( playlist_item_t * ); + +void playlist_release_current_input( playlist_t * p_playlist ); +void playlist_set_current_input( + playlist_t * p_playlist, input_thread_t * p_input ); /** * @} @@ -134,4 +134,19 @@ int playlist_ItemDelete ( playlist_item_t * ); #endif #define PLI_NAME( p ) p && p->p_input ? p->p_input->psz_name : "null" + +#define PL_ASSERT_LOCKED vlc_assert_locked( &(vlc_internals(p_playlist)->lock) ) + +#define PL_LOCK_IF( cond ) pl_lock_if( p_playlist, cond ) +static inline void pl_lock_if( playlist_t * p_playlist, bool cond ) +{ + if( cond ) PL_LOCK; else PL_ASSERT_LOCKED; +} + +#define PL_UNLOCK_IF( cond ) pl_unlock_if( p_playlist, cond ) +static inline void pl_unlock_if( playlist_t * p_playlist, bool cond ) +{ + if( cond ) PL_UNLOCK; +} + #endif /* !__LIBVLC_PLAYLIST_INTERNAL_H */