* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
-
+#if 0
#ifndef _VLC_DEVICES_H
#define _VLC_DEVICES_H 1
void ( *pf_run ) ( device_probe_t * ); /** Run function */
};
-static inline void device_GetDVD()
-{}
+static inline void device_GetDVD(void)
+{
+}
#endif
+#endif
TYPEDEF_ARRAY(playlist_item_t*, playlist_item_array_t);
TYPEDEF_ARRAY(input_item_t*, input_item_array_t);
+
/**
* \file
* This file contain structures and function prototypes related
/** playlist item / node */
struct playlist_item_t
{
- input_item_t *p_input; /**< input item descriptor */
-
- /* Tree specific fields */
- int i_children; /**< Number of children
- -1 if not a node */
+ input_item_t *p_input; /**< Linked input item */
+ /** Number of children, -1 if not a node */
+ int i_children;
playlist_item_t **pp_children; /**< Children nodes/items */
playlist_item_t *p_parent; /**< Item parent */
int i_id; /**< Playlist item specific id */
-
uint8_t i_flags; /**< Flags */
};
* Prototypes
*****************************************************************************/
-/* Global thread */
-#define playlist_ThreadCreate(a) __playlist_ThreadCreate(VLC_OBJECT(a))
-void __playlist_ThreadCreate ( vlc_object_t * );
-int playlist_ThreadDestroy ( playlist_t * );
-
/* Helpers */
#define PL_LOCK vlc_mutex_lock( &p_playlist->object_lock );
#define PL_UNLOCK vlc_mutex_unlock( &p_playlist->object_lock );
#define playlist_Prev(p) playlist_Control(p,PLAYLIST_SKIP, VLC_FALSE, -1)
#define playlist_Skip(p,i) playlist_Control(p,PLAYLIST_SKIP, VLC_FALSE, i)
-VLC_EXPORT( int, playlist_Control, ( playlist_t *, int, vlc_bool_t, ... ) );
+/**
+ * Do a playlist action.
+ * If there is something in the playlist then you can do playlist actions.
+ * Possible queries are listed in vlc_common.h
+ * \param p_playlist the playlist to do the command on
+ * \param i_query the command to do
+ * \param b_locked TRUE if playlist is locked when entering this function
+ * \param variable number of arguments
+ * \return VLC_SUCCESS or an error
+ */
+VLC_EXPORT( int, playlist_Control, ( playlist_t *p_playlist, int i_query, vlc_bool_t b_locked, ... ) );
+/** Clear the playlist
+ * \param b_locked TRUE if playlist is locked when entering this function
+ */
VLC_EXPORT( void, playlist_Clear, ( playlist_t *, vlc_bool_t ) );
+/** Enqueue an input item for preparsing */
VLC_EXPORT( int, playlist_PreparseEnqueue, (playlist_t *, input_item_t *) );
+
+/** Enqueue a playlist item and all of its children if any for preparsing */
VLC_EXPORT( int, playlist_PreparseEnqueueItem, (playlist_t *, playlist_item_t *) );
+/** Request the art for an input item to be fetched */
VLC_EXPORT( int, playlist_AskForArtEnqueue, (playlist_t *, input_item_t *) );
-/* Services discovery */
+/********************** Services discovery ***********************/
+/** Add a list of comma-separated service discovery modules */
VLC_EXPORT( int, playlist_ServicesDiscoveryAdd, (playlist_t *, const char *));
+/** Remove a services discovery module by name */
VLC_EXPORT( int, playlist_ServicesDiscoveryRemove, (playlist_t *, const char *));
-VLC_EXPORT( int, playlist_AddSDModules, (playlist_t *, char *));
+/** Check whether a given SD is loaded */
VLC_EXPORT( vlc_bool_t, playlist_IsServicesDiscoveryLoaded, ( playlist_t *,const char *));
/* Playlist sorting */
VLC_EXPORT( int, playlist_NodeSort, ( playlist_t *, playlist_item_t *,int, int ) );
VLC_EXPORT( int, playlist_RecursiveNodeSort, ( playlist_t *, playlist_item_t *,int, int ) );
-/* Save a playlist file */
-VLC_EXPORT( int, playlist_Export, ( playlist_t *, const char *, playlist_item_t *, const char * ) );
+/**
+ * Export a node of the playlist to a certain type of playlistfile
+ * \param p_playlist the playlist to export
+ * \param psz_filename the location where the exported file will be saved
+ * \param p_export_root the root node to export
+ * \param psz_type the type of playlist file to create (m3u, pls, ..)
+ * \return VLC_SUCCESS on success
+ */
+VLC_EXPORT( int, playlist_Export, ( playlist_t *p_playlist, const char *psz_name, playlist_item_t *p_export_root, const char *psz_type ) );
/********************************************************
* Item management
VLC_EXPORT( playlist_item_t* , playlist_ItemNewWithType, ( vlc_object_t *,const char *,const char *, int , const char *const *, int, int) );
-#define playlist_ItemNew( a , b, c ) __playlist_ItemNew(VLC_OBJECT(a) , b , c )
/** Create a new item, without adding it to the playlist
* \param p_obj a vlc object (anyone will do)
* \param psz_uri the mrl of the item
* \param psz_name a text giving a name or description of the item
* \return the new item or NULL on failure
*/
-static inline playlist_item_t * __playlist_ItemNew( vlc_object_t *p_obj,
- const char *psz_uri, const char *psz_name )
-{
- /* 0 = ITEM_TYPE_UNKNOWN */
- return playlist_ItemNewWithType( p_obj, psz_uri, psz_name, 0, NULL, -1,0);
-}
+#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_ItemDelete, ( playlist_item_t * ) );
VLC_EXPORT( int, playlist_DeleteFromInput, ( playlist_t *, int, vlc_bool_t ) );
/*************************** Item fields accessors **************************/
void (*__vlc_object_release_inner) (vlc_object_t *);
vlc_list_t * (*__vlc_list_find_inner) (vlc_object_t *, int, int);
void (*vlc_list_release_inner) (vlc_list_t *);
- int (*playlist_Control_inner) (playlist_t *, int, vlc_bool_t, ...);
+ int (*playlist_Control_inner) (playlist_t *p_playlist, int i_query, vlc_bool_t b_locked, ...);
void *playlist_LockControl_deprecated;
void (*playlist_Clear_inner) (playlist_t *, vlc_bool_t);
void *playlist_LockClear_deprecated;
int (*playlist_PreparseEnqueue_inner) (playlist_t *, input_item_t *);
int (*playlist_ServicesDiscoveryAdd_inner) (playlist_t *, const char *);
int (*playlist_ServicesDiscoveryRemove_inner) (playlist_t *, const char *);
- int (*playlist_AddSDModules_inner) (playlist_t *, char *);
+ void *playlist_AddSDModules_deprecated;
vlc_bool_t (*playlist_IsServicesDiscoveryLoaded_inner) (playlist_t *,const char *);
void *__playlist_ItemNew_deprecated;
void *__playlist_ItemCopy_deprecated;
playlist_item_t* (*playlist_ItemNewWithType_inner) (vlc_object_t *,const char *,const char *, int , const char *const *, int, int);
- int (*playlist_ItemDelete_inner) (playlist_item_t *);
+ void *playlist_ItemDelete_deprecated;
void *playlist_ItemAddParent_deprecated;
void *playlist_CopyParents_deprecated;
int (*playlist_ItemSetName_inner) (playlist_item_t *, const char *);
int (*playlist_NodeSort_inner) (playlist_t *, playlist_item_t *,int, int);
int (*playlist_RecursiveNodeSort_inner) (playlist_t *, playlist_item_t *,int, int);
void *playlist_Import_deprecated;
- int (*playlist_Export_inner) (playlist_t *, const char *, playlist_item_t *, const char *);
+ int (*playlist_Export_inner) (playlist_t *p_playlist, const char *psz_name, playlist_item_t *p_export_root, const char *psz_type);
spu_t * (*__spu_Create_inner) (vlc_object_t *);
int (*spu_Init_inner) (spu_t *);
void (*spu_Destroy_inner) (spu_t *);
# define playlist_PreparseEnqueue (p_symbols)->playlist_PreparseEnqueue_inner
# define playlist_ServicesDiscoveryAdd (p_symbols)->playlist_ServicesDiscoveryAdd_inner
# define playlist_ServicesDiscoveryRemove (p_symbols)->playlist_ServicesDiscoveryRemove_inner
-# define playlist_AddSDModules (p_symbols)->playlist_AddSDModules_inner
# define playlist_IsServicesDiscoveryLoaded (p_symbols)->playlist_IsServicesDiscoveryLoaded_inner
# define playlist_ItemNewWithType (p_symbols)->playlist_ItemNewWithType_inner
-# define playlist_ItemDelete (p_symbols)->playlist_ItemDelete_inner
# define playlist_ItemSetName (p_symbols)->playlist_ItemSetName_inner
# define playlist_NodeCreate (p_symbols)->playlist_NodeCreate_inner
# define playlist_NodeAppend (p_symbols)->playlist_NodeAppend_inner
((p_symbols)->playlist_PreparseEnqueue_inner) = playlist_PreparseEnqueue; \
((p_symbols)->playlist_ServicesDiscoveryAdd_inner) = playlist_ServicesDiscoveryAdd; \
((p_symbols)->playlist_ServicesDiscoveryRemove_inner) = playlist_ServicesDiscoveryRemove; \
- ((p_symbols)->playlist_AddSDModules_inner) = playlist_AddSDModules; \
((p_symbols)->playlist_IsServicesDiscoveryLoaded_inner) = playlist_IsServicesDiscoveryLoaded; \
((p_symbols)->playlist_ItemNewWithType_inner) = playlist_ItemNewWithType; \
- ((p_symbols)->playlist_ItemDelete_inner) = playlist_ItemDelete; \
((p_symbols)->playlist_ItemSetName_inner) = playlist_ItemSetName; \
((p_symbols)->playlist_NodeCreate_inner) = playlist_NodeCreate; \
((p_symbols)->playlist_NodeAppend_inner) = playlist_NodeAppend; \
(p_symbols)->vlc_input_item_AddInfo_deprecated = NULL; \
(p_symbols)->playlist_LockControl_deprecated = NULL; \
(p_symbols)->playlist_LockClear_deprecated = NULL; \
+ (p_symbols)->playlist_AddSDModules_deprecated = NULL; \
(p_symbols)->__playlist_ItemNew_deprecated = NULL; \
(p_symbols)->__playlist_ItemCopy_deprecated = NULL; \
+ (p_symbols)->playlist_ItemDelete_deprecated = NULL; \
(p_symbols)->playlist_ItemAddParent_deprecated = NULL; \
(p_symbols)->playlist_CopyParents_deprecated = NULL; \
(p_symbols)->playlist_ItemSetDuration_deprecated = NULL; \
#include "libvlc.h"
+#include "playlist/playlist_internal.h"
+
/*****************************************************************************
* The evil global variable. We handle it with care, don't worry.
*****************************************************************************/
if( psz_modules && *psz_modules )
{
/* Add service discovery modules */
- playlist_AddSDModules( p_playlist, psz_modules );
+ playlist_ServicesDiscoveryAdd( p_playlist, psz_modules );
}
if( psz_modules ) free( psz_modules );
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
+#if 0
+
/*****************************************************************************
* Preamble
*****************************************************************************/
p_this->p_libvlc_global->p_probe = p_probe;
}
+
+#endif
* Playlist control
*****************************************************************************/
-/**
- * Do a playlist action.
- * If there is something in the playlist then you can do playlist actions.
- * Should be entered with playlist lock. See include/vlc_playlist.h for
- * possible queries
- *
- * \param p_playlist the playlist to do the command on
- * \param i_query the command to do
- * \param variable number of arguments
- * \return VLC_SUCCESS or an error
- */
int playlist_Control( playlist_t * p_playlist, int i_query, vlc_bool_t b_locked, ... )
{
va_list args;
return VLC_SUCCESS;
}
-/** Clear the playlist */
void playlist_Clear( playlist_t * p_playlist, vlc_bool_t b_locked )
{
if( !b_locked ) PL_LOCK;
#include "charset.h"
#include <errno.h>
-/**
- * Export a node of the playlist to a certain type of playlistfile
- *
- * \param p_playlist the playlist to export
- * \param psz_filename the location where the exported file will be saved
- * \param p_export_root the root node to export
- * \param psz_type the type of playlist file to create.
- * \return VLC_SUCCESS on success
- */
int playlist_Export( playlist_t * p_playlist, const char *psz_filename ,
playlist_item_t *p_export_root,const char *psz_type )
{
* Prototypes
*****************************************************************************/
+/* Global thread */
+#define playlist_ThreadCreate(a) __playlist_ThreadCreate(VLC_OBJECT(a))
+void __playlist_ThreadCreate ( vlc_object_t * );
+int playlist_ThreadDestroy ( playlist_t * );
+
/* Creation/Deletion */
playlist_t *playlist_Create ( vlc_object_t * );
void playlist_Destroy ( playlist_t * );
playlist_item_t *p_root );
int playlist_DeleteFromItemId( playlist_t*, int );
+int playlist_ItemDelete ( playlist_item_t * );
/**
* @}
*/
#define PLAYLIST_DEBUG 1
-//#undef PLAYLIST_DEBUG
+//#undef PLAYLIST_DEBUG2
#ifdef PLAYLIST_DEBUG
#define PL_DEBUG( msg, args... ) msg_Dbg( p_playlist, msg, ## args )
#include "vlc_playlist.h"
#include "playlist_internal.h"
-/*****************************************************************************
- * Local prototypes
- *****************************************************************************/
-
static void RunSD( services_discovery_t *p_sd );
-
-/***************************************************************************
-***************************************************************************/
-
-int playlist_ServicesDiscoveryAdd( playlist_t *p_playlist,
- const char *psz_module )
+int playlist_ServicesDiscoveryAdd( playlist_t *p_playlist, const char *psz_modules )
{
- services_discovery_t *p_sd;
-
- p_sd = vlc_object_create( p_playlist, VLC_OBJECT_SD );
- p_sd->pf_run = NULL;
-
- p_sd->p_module = module_Need( p_sd, "services_discovery", psz_module, 0 );
-
- if( p_sd->p_module == NULL )
+ if( psz_modules && *psz_modules )
{
- msg_Err( p_playlist, "no suitable services discovery module" );
- vlc_object_destroy( p_sd );
- return VLC_EGENERIC;
- }
-
- p_sd->psz_module = strdup( psz_module );
- p_sd->b_die = VLC_FALSE;
-
- vlc_mutex_lock( &p_playlist->object_lock );
-
- INSERT_ELEM( p_playlist->pp_sds, p_playlist->i_sds, p_playlist->i_sds,
- p_sd );
+ char *psz_parser = psz_modules;
+ char *psz_next;
- vlc_mutex_unlock( &p_playlist->object_lock );
+ while( psz_parser && *psz_parser )
+ {
+ while( *psz_parser == ' ' || *psz_parser == ':' || *psz_parser == ',' )
+ psz_parser++;
- if( !p_sd->pf_run ) return VLC_SUCCESS;
+ if( (psz_next = strchr( psz_parser, ':' ) ) )
+ *psz_next++ = '\0';
- if( vlc_thread_create( p_sd, "services_discovery", RunSD,
- VLC_THREAD_PRIORITY_LOW, VLC_FALSE ) )
- {
- msg_Err( p_sd, "cannot create services discovery thread" );
- vlc_object_destroy( p_sd );
- return VLC_EGENERIC;
+ if( *psz_parser == '\0' )
+ break;
+ fprintf(stderr,"Add %s\n", psz_parser);
+ /* Perform the addition */
+ {
+ services_discovery_t *p_sd = vlc_object_create( p_playlist,
+ VLC_OBJECT_SD );
+ p_sd->pf_run = NULL;
+ p_sd->p_module = module_Need( p_sd, "services_discovery", psz_parser, 0 );
+
+ if( p_sd->p_module == NULL )
+ {
+ msg_Err( p_playlist, "no suitable services discovery module" );
+ vlc_object_destroy( p_sd );
+ return VLC_EGENERIC;
+ }
+ p_sd->psz_module = strdup( psz_parser );
+ p_sd->b_die = VLC_FALSE;
+
+ PL_LOCK;
+ TAB_APPEND( p_playlist->i_sds, p_playlist->pp_sds, p_sd );
+ PL_UNLOCK;
+
+ if( !p_sd->pf_run ) {
+ psz_parser = psz_next;
+ continue;
+ }
+
+ if( vlc_thread_create( p_sd, "services_discovery", RunSD,
+ VLC_THREAD_PRIORITY_LOW, VLC_FALSE ) )
+ {
+ msg_Err( p_sd, "cannot create services discovery thread" );
+ vlc_object_destroy( p_sd );
+ return VLC_EGENERIC;
+ }
+ }
+ psz_parser = psz_next;
+ }
}
-
-
return VLC_SUCCESS;
}
return VLC_FALSE;
}
-
-/**
- * Load all service discovery modules in a string
- *
- * \param p_playlist the playlist
- * \param psz_modules a list of modules separated by commads
- * return VLC_SUCCESS or an error
- */
-int playlist_AddSDModules( playlist_t *p_playlist, char *psz_modules )
-{
- if( psz_modules && *psz_modules )
- {
- char *psz_parser = psz_modules;
- char *psz_next;
-
- while( psz_parser && *psz_parser )
- {
- while( *psz_parser == ' ' || *psz_parser == ':' )
- psz_parser++;
-
- if( (psz_next = strchr( psz_parser, ':' ) ) )
- *psz_next++ = '\0';
-
- if( *psz_parser == '\0' )
- {
- break;
- }
-
- playlist_ServicesDiscoveryAdd( p_playlist, psz_parser );
-
- psz_parser = psz_next;
- }
- }
- return VLC_SUCCESS;
-}
-
static void RunSD( services_discovery_t *p_sd )
{
p_sd->pf_run( p_sd );
if( p_parent != NULL )
playlist_NodeAppend( p_playlist, p_item, p_parent );
-
playlist_SendAddNotify( p_playlist, p_item->i_id,
p_parent ? p_parent->i_id : -1 );
return p_item;
else
{
int i;
- var_SetInteger( p_playlist, "item-deleted", p_root->p_input->i_id );
+ var_SetInteger( p_playlist, "item-deleted", p_root->i_id );
ARRAY_BSEARCH( p_playlist->all_items, ->p_input->i_id, int,
p_root->p_input->i_id, i );
if( i != -1 )