X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fplaylist%2Fplaylist_internal.h;h=e9601a1549f4b0b94bf0d01352868b2cea85805a;hb=2f4258d6fc05ba948b1f6f60a786b306db32d1c0;hp=767b649596a8462b1909f197bde01e6fd7ff7919;hpb=0a1480ee6d7dd33d312048fa62231ba5ed6e9a02;p=vlc diff --git a/src/playlist/playlist_internal.h b/src/playlist/playlist_internal.h index 767b649596..e9601a1549 100644 --- a/src/playlist/playlist_internal.h +++ b/src/playlist/playlist_internal.h @@ -1,7 +1,7 @@ /***************************************************************************** - * playlist_internal.h : Functions for use by the playlist + * playlist_internal.h : Playlist internals ***************************************************************************** - * Copyright (C) 1999-2004 the VideoLAN team + * Copyright (C) 1999-2008 the VideoLAN team * $Id$ * * Authors: Samuel Hocevar @@ -37,24 +37,78 @@ #include "input/input_internal.h" #include -struct playlist_preparse_t +typedef struct playlist_preparse_t { - VLC_COMMON_MEMBERS + vlc_thread_t thread; vlc_mutex_t lock; - int i_waiting; + vlc_cond_t wait; input_item_t **pp_waiting; -}; + int i_waiting; + bool up; +} playlist_preparse_t; -struct playlist_fetcher_t +typedef struct playlist_fetcher_t { - VLC_COMMON_MEMBERS + 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; DECL_ARRAY(playlist_album_t) albums; -}; +} playlist_fetcher_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_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; + int i_sds; /**< Number of service discovery modules */ + input_thread_t * p_input; /**< the input thread associated + * with the current item */ + 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 */ + playlist_status_t 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; + + bool b_tree; /**< Display as a tree */ + bool b_doing_ml; /**< Doing media library stuff get quicker */ + bool b_auto_preparse; + bool b_cant_sleep; + mtime_t gc_date; +} playlist_private_t; + +#define pl_priv( pl ) ((playlist_private_t *)(pl)) /***************************************************************************** * Prototypes @@ -73,8 +127,8 @@ playlist_t *playlist_Create ( vlc_object_t * ); /* Engine */ void playlist_MainLoop( playlist_t * ); void playlist_LastLoop( playlist_t * ); -void playlist_PreparseLoop( playlist_preparse_t * ); -void playlist_FetcherLoop( playlist_fetcher_t * ); +void *playlist_PreparseLoop( void * ); +void *playlist_FetcherLoop( void * ); void ResetCurrentlyPlaying( playlist_t *, bool, playlist_item_t * ); @@ -98,6 +152,9 @@ 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 */ playlist_item_t *playlist_ItemFindFromInputAndRoot( playlist_t *p_playlist, int i_input_id, playlist_item_t *p_root, @@ -105,7 +162,7 @@ playlist_item_t *playlist_ItemFindFromInputAndRoot( playlist_t *p_playlist, 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(