X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fplaylist%2Fplaylist_internal.h;h=959b8e3d9f1bf5cbd52e37be480fb131f187dd98;hb=1644d683e9df1620685ed666865b4752bfcca3a0;hp=8a17401f19ee880ec06e14feac197bd5e21a88dd;hpb=09995291a6fed158bae8160a877e9d663a072c32;p=vlc diff --git a/src/playlist/playlist_internal.h b/src/playlist/playlist_internal.h index 8a17401f19..959b8e3d9f 100644 --- a/src/playlist/playlist_internal.h +++ b/src/playlist/playlist_internal.h @@ -34,51 +34,29 @@ * @{ */ -#include "input/input_internal.h" +#include "input/input_interface.h" #include -typedef struct playlist_preparse_t -{ - vlc_thread_t thread; - vlc_mutex_t lock; - vlc_cond_t wait; - input_item_t **pp_waiting; - int i_waiting; - bool up; -} playlist_preparse_t; - -typedef struct playlist_fetcher_t -{ - vlc_thread_t thread; - vlc_mutex_t lock; - vlc_cond_t wait; - int i_art_policy; - int i_waiting; - input_item_t **pp_waiting; - bool up; +#include "art.h" +#include "fetcher.h" +#include "preparser.h" - DECL_ARRAY(playlist_album_t) albums; -} playlist_fetcher_t; +typedef struct vlc_sd_internal_t vlc_sd_internal_t; typedef struct playlist_private_t { playlist_t public_data; - playlist_preparse_t preparse; /**< Preparser data */ - playlist_fetcher_t fetcher; /**< Meta and art fetcher data */ - sout_instance_t *p_sout; /**< Kept sout instance */ + playlist_preparser_t *p_preparser; /**< Preparser data */ + playlist_fetcher_t *p_fetcher; /**< Meta and art fetcher data */ playlist_item_array_t items_to_delete; /**< Array of items and nodes to delete... At the very end. This sucks. */ - 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; + vlc_sd_internal_t **pp_sds; int i_sds; /**< Number of service discovery modules */ input_thread_t * p_input; /**< the input thread associated * with the current item */ + input_resource_t * p_input_resource; /**< input resources */ struct { /* Current status. These fields are readonly, only the playlist * main loop can touch it*/ @@ -101,9 +79,18 @@ typedef struct playlist_private_t vlc_mutex_t lock; /**< Lock to protect request */ } request; + vlc_thread_t thread; /**< engine thread */ + vlc_mutex_t lock; /**< dah big playlist global lock */ + vlc_cond_t signal; /**< wakes up the playlist engine thread */ + + int i_last_playlist_id; /**< Last id to an item */ + bool b_reset_currently_playing; /** Reset current item array */ + bool b_tree; /**< Display as a tree */ bool b_doing_ml; /**< Doing media library stuff get quicker */ bool b_auto_preparse; + mtime_t last_rebuild_date; + } playlist_private_t; #define pl_priv( pl ) ((playlist_private_t *)(pl)) @@ -112,33 +99,25 @@ typedef struct playlist_private_t * Prototypes *****************************************************************************/ -/* Global thread */ -#define playlist_ThreadCreate(a) __playlist_ThreadCreate(VLC_OBJECT(a)) -void __playlist_ThreadCreate ( vlc_object_t * ); - -playlist_item_t *playlist_ItemNewFromInput( playlist_t *p_playlist, - input_item_t *p_input ); - /* Creation/Deletion */ -playlist_t *playlist_Create ( vlc_object_t * ); +playlist_t *playlist_Create( vlc_object_t * ); +void playlist_Destroy( playlist_t * ); -/* Engine */ -void playlist_MainLoop( playlist_t * ); -void playlist_LastLoop( playlist_t * ); -void *playlist_PreparseLoop( void * ); -void *playlist_FetcherLoop( void * ); +/* */ +void playlist_Activate( playlist_t * ); +void playlist_Deactivate( playlist_t * ); +void pl_Deactivate (libvlc_int_t *); -void ResetCurrentlyPlaying( playlist_t *, bool, playlist_item_t * ); +/* */ +playlist_item_t *playlist_ItemNewFromInput( playlist_t *p_playlist, + input_item_t *p_input ); +/* Engine */ 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 * ); - /* Load/Save */ int playlist_MLLoad( playlist_t *p_playlist ); int playlist_MLDump( playlist_t *p_playlist ); @@ -153,18 +132,22 @@ void playlist_SendAddNotify( playlist_t *p_playlist, int i_item_id, playlist_item_t * playlist_NodeAddInput( playlist_t *, input_item_t *, playlist_item_t *,int , int, bool ); +playlist_item_t * playlist_InsertInputItemTree ( playlist_t *, + playlist_item_t *, input_item_node_t *, int, bool ); + /* Tree walking */ playlist_item_t *playlist_ItemFindFromInputAndRoot( playlist_t *p_playlist, - int i_input_id, playlist_item_t *p_root, - bool ); + input_item_t *p_input, playlist_item_t *p_root, + bool ); -int playlist_DeleteFromInputInParent( playlist_t *, int, playlist_item_t *, bool ); +int playlist_DeleteFromInputInParent( playlist_t *, input_item_t *, + playlist_item_t *, bool ); int playlist_DeleteFromItemId( playlist_t*, int ); 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 ); +int playlist_NodeEmpty( playlist_t *, playlist_item_t *, bool ); +int playlist_DeleteItem( playlist_t * p_playlist, playlist_item_t *, bool); + /** * @} @@ -187,8 +170,6 @@ void playlist_set_current_input( #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 ) {