*/
VLC_EXPORT( int, playlist_Control, ( playlist_t *p_playlist, int i_query, bool b_locked, ... ) );
+/** Get current playing input. The object is retained.
+ */
+VLC_EXPORT( input_thread_t *, playlist_CurrentInput, ( playlist_t *p_playlist ) );
+
/** Clear the playlist
* \param b_locked TRUE if playlist is locked when entering this function
*/
/*************************** Item creation **************************/
-VLC_EXPORT( playlist_item_t* , playlist_ItemNewWithType, ( vlc_object_t *,const char *,const char *, int , const char *const *, int, int) );
+VLC_EXPORT( playlist_item_t* , playlist_ItemNewWithType, ( playlist_t *,const char *,const char *, int , const char *const *, int, int) );
/** Create a new item, without adding it to the playlist
* \param p_obj a vlc object (anyone will do)
#define playlist_ItemNew( a , b, c ) \
playlist_ItemNewWithType( VLC_OBJECT(a) , b , c, 0, NULL, -1, 0 )
-#define playlist_ItemNewFromInput(a,b) __playlist_ItemNewFromInput(VLC_OBJECT(a),b)
-VLC_EXPORT( playlist_item_t *, __playlist_ItemNewFromInput, ( vlc_object_t *p_obj,input_item_t *p_input ) );
/*************************** Item deletion **************************/
VLC_EXPORT( int, playlist_DeleteFromInput, ( playlist_t *, int, bool ) );
return VLC_SUCCESS;
}
+/** Small helper tp get current playing input or NULL. Release the input after use. */
+#define pl_CurrentInput(a) __pl_CurrentInput( VLC_OBJECT(a) )
+static inline input_thread_t * __pl_CurrentInput( vlc_object_t * p_this )
+{
+ playlist_t * p_playlist = pl_Yield( p_this );
+ if( !p_playlist ) return NULL;
+ input_thread_t * p_input = playlist_CurrentInput( p_playlist );
+ pl_Release( p_this );
+ return p_input;
+}
+
/** Tell if the playlist is currently running */
-#define playlist_IsPlaying( pl ) ( pl->status.i_status == PLAYLIST_RUNNING )
+#define playlist_IsPlaying( pl ) ( pl->status.i_status == PLAYLIST_RUNNING && \
+ !(pl->request.b_request && pl->request.i_status == PLAYLIST_STOPPED) )
+
+#define playlist_IsStopped( pl ) ( pl->status.i_status == PLAYLIST_STOPPED || \
+ (pl->request.b_request && pl->request.i_status == PLAYLIST_STOPPED) )
/** Tell if the playlist is empty */
#define playlist_IsEmpty( pl ) ( pl->items.i_size == 0 )
/** Tell the number of items in the current playing context */
#define playlist_CurrentSize( pl ) pl->current.i_size
+/** Tell the current item id in current playing context */
+#define playlist_CurrentId( pl ) pl->status.p_item->i_id
+
/** Ask the playlist to do some work */
#define playlist_Signal( p_playlist ) vlc_object_signal( p_playlist )