2001-02-08 05:43:28 +01:00
|
|
|
/*****************************************************************************
|
* ALL: the first libvlc commit.
As for video output 4, this breaks almost everything, but I'll slowly
do what remains to be fixed during the weekend.
Changes in vlc:
===============
* vlc is now a very small program (20 lines) which uses the libvlc API;
it is quite simple for the moment but can be extended in the future.
* interfaces, decoders, video outputs, etc. are now almost the same
objects (yes, I know, this is C++ redone in C) and are structured in
a tree. More about this later, but basically it allows the following
nice features:
- several interfaces
- several playlists with several outputs
- input plugins spawning helper interfaces (will be used for DVD menus)
- anything spawning anything; I swear there are useful uses for this!
* libvlc can be used in other programs; I'm currently writing a Mozilla
plugin for my employer.
Things currently broken:
========================
* most interfaces, most ports
* the playlist handling (almost finished rewriting this though). This means
no file can be played from the GUI, you need to use the commandline. This
also means it segfaults at EOF, when exiting the program, and it sometimes
refuses to open a file when asked to.
2002-06-01 14:32:02 +02:00
|
|
|
* vlc_playlist.h : Playlist functions
|
2001-02-08 05:43:28 +01:00
|
|
|
*****************************************************************************
|
2005-07-09 08:17:09 +02:00
|
|
|
* Copyright (C) 1999-2004 the VideoLAN team
|
2004-03-31 22:52:31 +02:00
|
|
|
* $Id$
|
2001-02-08 05:43:28 +01:00
|
|
|
*
|
2001-02-08 08:24:25 +01:00
|
|
|
* Authors: Samuel Hocevar <sam@zoy.org>
|
2001-02-08 05:43:28 +01:00
|
|
|
*
|
|
|
|
* This program is free software; you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU General Public License as published by
|
|
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
|
|
* (at your option) any later version.
|
2003-10-06 18:23:30 +02:00
|
|
|
*
|
2001-02-08 05:43:28 +01:00
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
* along with this program; if not, write to the Free Software
|
2006-01-13 00:10:04 +01:00
|
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
|
2001-02-08 05:43:28 +01:00
|
|
|
*****************************************************************************/
|
|
|
|
|
2003-08-14 15:02:55 +02:00
|
|
|
/**
|
|
|
|
* \file
|
|
|
|
* This file contain structures and function prototypes related
|
|
|
|
* to the playlist in vlc
|
|
|
|
*/
|
|
|
|
|
|
|
|
/**
|
|
|
|
* \defgroup vlc_playlist Playlist
|
|
|
|
* Brief description. Longer description
|
|
|
|
* @{
|
|
|
|
*/
|
|
|
|
|
2004-01-11 01:45:06 +01:00
|
|
|
/**
|
|
|
|
* playlist export helper structure
|
|
|
|
*/
|
|
|
|
struct playlist_export_t
|
|
|
|
{
|
|
|
|
char *psz_filename;
|
|
|
|
FILE *p_file;
|
|
|
|
};
|
|
|
|
|
2004-11-06 12:17:46 +01:00
|
|
|
struct item_parent_t
|
|
|
|
{
|
|
|
|
int i_view;
|
|
|
|
playlist_item_t *p_parent;
|
|
|
|
};
|
|
|
|
|
2003-08-14 15:02:55 +02:00
|
|
|
/**
|
2004-11-06 12:17:46 +01:00
|
|
|
* playlist item / node
|
2003-08-14 15:02:55 +02:00
|
|
|
* \see playlist_t
|
|
|
|
*/
|
2002-07-20 20:01:43 +02:00
|
|
|
struct playlist_item_t
|
2001-02-08 05:43:28 +01:00
|
|
|
{
|
2004-11-06 12:17:46 +01:00
|
|
|
input_item_t input; /**< input item descriptor */
|
|
|
|
|
|
|
|
/* Tree specific fields */
|
|
|
|
int i_children; /**< Number of children
|
|
|
|
-1 if not a node */
|
|
|
|
playlist_item_t **pp_children; /**< Children nodes/items */
|
|
|
|
int i_parents; /**< Number of parents */
|
|
|
|
struct item_parent_t **pp_parents; /**< Parents */
|
|
|
|
int i_serial; /**< Has this node been updated ? */
|
|
|
|
|
|
|
|
uint8_t i_flags; /**< Flags */
|
|
|
|
|
|
|
|
|
|
|
|
int i_nb_played; /**< How many times was this item played ? */
|
2004-11-17 22:38:23 +01:00
|
|
|
|
|
|
|
/* LEGACY FIELDS */
|
2004-11-06 12:17:46 +01:00
|
|
|
vlc_bool_t b_autodeletion; /**< Indicates whther this item is to
|
|
|
|
* be deleted after playback. True mean
|
|
|
|
* that this item is to be deleted
|
|
|
|
* after playback, false otherwise */
|
|
|
|
vlc_bool_t b_enabled; /**< Indicates whether this item is to be
|
|
|
|
* played or skipped */
|
2004-11-17 22:38:23 +01:00
|
|
|
/* END LEGACY FIELDS */
|
* ALL: the first libvlc commit.
As for video output 4, this breaks almost everything, but I'll slowly
do what remains to be fixed during the weekend.
Changes in vlc:
===============
* vlc is now a very small program (20 lines) which uses the libvlc API;
it is quite simple for the moment but can be extended in the future.
* interfaces, decoders, video outputs, etc. are now almost the same
objects (yes, I know, this is C++ redone in C) and are structured in
a tree. More about this later, but basically it allows the following
nice features:
- several interfaces
- several playlists with several outputs
- input plugins spawning helper interfaces (will be used for DVD menus)
- anything spawning anything; I swear there are useful uses for this!
* libvlc can be used in other programs; I'm currently writing a Mozilla
plugin for my employer.
Things currently broken:
========================
* most interfaces, most ports
* the playlist handling (almost finished rewriting this though). This means
no file can be played from the GUI, you need to use the commandline. This
also means it segfaults at EOF, when exiting the program, and it sometimes
refuses to open a file when asked to.
2002-06-01 14:32:02 +02:00
|
|
|
};
|
2001-02-08 05:43:28 +01:00
|
|
|
|
2004-12-14 12:40:09 +01:00
|
|
|
#define PLAYLIST_SAVE_FLAG 0x01 /**< Must it be saved */
|
|
|
|
#define PLAYLIST_SKIP_FLAG 0x02 /**< Must playlist skip after it ? */
|
|
|
|
#define PLAYLIST_ENA_FLAG 0x04 /**< Is it enabled ? */
|
|
|
|
#define PLAYLIST_DEL_FLAG 0x08 /**< Autodelete ? */
|
|
|
|
#define PLAYLIST_RO_FLAG 0x10 /**< Write-enabled ? */
|
2005-04-13 19:43:12 +02:00
|
|
|
#define PLAYLIST_REMOVE_FLAG 0x20 /**< Remove this item at the end */
|
2004-11-06 12:17:46 +01:00
|
|
|
|
2004-01-05 13:59:43 +01:00
|
|
|
/**
|
2004-11-06 12:17:46 +01:00
|
|
|
* playlist view
|
2004-01-05 13:59:43 +01:00
|
|
|
* \see playlist_t
|
2004-11-06 12:17:46 +01:00
|
|
|
*/
|
|
|
|
struct playlist_view_t
|
* src/playlist/* && Makefile.am
- splitted the enormous playlist.c file
- implemented a better item group system: groups have a name
and must be created before use by
playlist_CreateGroup( p_playlist, "newgroupname")
* modules/misc/sap.c
- Create our own playlist group ("SAP") and use it
* modules/access/slp.c
- Create our own playlist group ("SLP") and use it
* modules/demux/util/id3tag.c
- Trigger playlist update when we have parsed our tag
* modules/gui/wxwindows/interface.cpp
- Fixed the about box by using vlc_wraptext
- Added the simple open and the streaming wizard icons
*** Icons need to be changed ! ***
- Added the visualization to the extended gui
* modules/gui/wxwindows/preferences.cpp && include/vlc_help.h
- Enlarged the window to fit the wrapped text
- Added help for audio encoders
* modules/gui/wxwindows/stream.cpp & open.cpp & include/vlc_interface.h
- Created a "streaming wizard" window (3-step streaming)
* modules/gui/wxwindows/iteminfo.cpp:
- Group change is now based on the name
* modules/gui/wxwindows/playlist.cpp
- Added author and group columns to the listview
- Redesigned the window
- Added the Sort menu with several criteria (title, author, group)
- Added up/down buttons to move an item in the playlist
- Added the group menu to enable/disable a group in an understandable way
TODO:
-----
* playlist core :
- Implement advanced sort capabilities (multi-criteria)
- File format to save the new features
- export playlist (to M3U, eg)
- more robust group creation (duplicates check, ...)
* wxWindows playlist:
The idea of a treeview seems impossible, because of wxWindow's treeview,
that don't allow multi-selection, and, as far as I know, multi-columns.
- Provide a frontend to advanced sort (when it's done :-) )
- Allow moving items by drag & drop (well, if possible, haven't checked yet)
- Allow moving several items at once
- Customizable listview (ability to remove/move columns)
- Find a solution to the focus problem
(when you change track, the selected one scrolls at the
bottom of the visible screen)
* wxWindows interface:
- New icons, our icons begin to get old and not so pretty
- Find a solution for the volume bar (nobody understands what it is)
2003-10-29 18:32:55 +01:00
|
|
|
{
|
2004-11-06 12:17:46 +01:00
|
|
|
char * psz_name; /**< View name */
|
|
|
|
int i_id; /**< Identifier for the view */
|
|
|
|
playlist_item_t * p_root; /**< Root node */
|
* src/playlist/* && Makefile.am
- splitted the enormous playlist.c file
- implemented a better item group system: groups have a name
and must be created before use by
playlist_CreateGroup( p_playlist, "newgroupname")
* modules/misc/sap.c
- Create our own playlist group ("SAP") and use it
* modules/access/slp.c
- Create our own playlist group ("SLP") and use it
* modules/demux/util/id3tag.c
- Trigger playlist update when we have parsed our tag
* modules/gui/wxwindows/interface.cpp
- Fixed the about box by using vlc_wraptext
- Added the simple open and the streaming wizard icons
*** Icons need to be changed ! ***
- Added the visualization to the extended gui
* modules/gui/wxwindows/preferences.cpp && include/vlc_help.h
- Enlarged the window to fit the wrapped text
- Added help for audio encoders
* modules/gui/wxwindows/stream.cpp & open.cpp & include/vlc_interface.h
- Created a "streaming wizard" window (3-step streaming)
* modules/gui/wxwindows/iteminfo.cpp:
- Group change is now based on the name
* modules/gui/wxwindows/playlist.cpp
- Added author and group columns to the listview
- Redesigned the window
- Added the Sort menu with several criteria (title, author, group)
- Added up/down buttons to move an item in the playlist
- Added the group menu to enable/disable a group in an understandable way
TODO:
-----
* playlist core :
- Implement advanced sort capabilities (multi-criteria)
- File format to save the new features
- export playlist (to M3U, eg)
- more robust group creation (duplicates check, ...)
* wxWindows playlist:
The idea of a treeview seems impossible, because of wxWindow's treeview,
that don't allow multi-selection, and, as far as I know, multi-columns.
- Provide a frontend to advanced sort (when it's done :-) )
- Allow moving items by drag & drop (well, if possible, haven't checked yet)
- Allow moving several items at once
- Customizable listview (ability to remove/move columns)
- Find a solution to the focus problem
(when you change track, the selected one scrolls at the
bottom of the visible screen)
* wxWindows interface:
- New icons, our icons begin to get old and not so pretty
- Find a solution for the volume bar (nobody understands what it is)
2003-10-29 18:32:55 +01:00
|
|
|
};
|
|
|
|
|
2004-11-06 12:17:46 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* predefined views
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
#define VIEW_CATEGORY 1
|
|
|
|
#define VIEW_SIMPLE 2
|
|
|
|
#define VIEW_ALL 3
|
|
|
|
#define VIEW_FIRST_SORTED 4
|
|
|
|
#define VIEW_S_AUTHOR 4
|
2005-04-10 20:40:52 +02:00
|
|
|
#define VIEW_S_GENRE 5
|
2005-09-15 19:42:24 +02:00
|
|
|
#define VIEW_S_ALBUM 6
|
2004-11-06 12:17:46 +01:00
|
|
|
|
2005-04-10 20:40:52 +02:00
|
|
|
#define VIEW_LAST_SORTED 10
|
2004-11-06 12:17:46 +01:00
|
|
|
|
|
|
|
#define VIEW_FIRST_CUSTOM 100
|
|
|
|
|
2003-08-14 15:02:55 +02:00
|
|
|
/**
|
|
|
|
* Playlist status
|
|
|
|
*/
|
|
|
|
typedef enum { PLAYLIST_STOPPED,PLAYLIST_RUNNING,PLAYLIST_PAUSED } playlist_status_t;
|
|
|
|
|
2004-11-08 19:19:51 +01:00
|
|
|
|
|
|
|
struct services_discovery_t
|
|
|
|
{
|
|
|
|
VLC_COMMON_MEMBERS
|
2005-07-10 10:55:16 +02:00
|
|
|
char *psz_module;
|
2004-11-08 19:19:51 +01:00
|
|
|
|
|
|
|
module_t *p_module;
|
|
|
|
|
|
|
|
services_discovery_sys_t *p_sys;
|
|
|
|
void (*pf_run) ( services_discovery_t *);
|
|
|
|
};
|
|
|
|
|
2004-12-10 19:58:22 +01:00
|
|
|
struct playlist_preparse_t
|
|
|
|
{
|
|
|
|
VLC_COMMON_MEMBERS
|
|
|
|
vlc_mutex_t lock;
|
|
|
|
int i_waiting;
|
2006-01-21 17:44:36 +01:00
|
|
|
int *pi_waiting;
|
2004-12-10 19:58:22 +01:00
|
|
|
};
|
|
|
|
|
2004-11-08 19:19:51 +01:00
|
|
|
|
2003-08-14 15:02:55 +02:00
|
|
|
/**
|
|
|
|
* Structure containing information about the playlist
|
|
|
|
*/
|
2002-07-20 20:01:43 +02:00
|
|
|
struct playlist_t
|
2001-02-08 05:43:28 +01:00
|
|
|
{
|
* ALL: the first libvlc commit.
As for video output 4, this breaks almost everything, but I'll slowly
do what remains to be fixed during the weekend.
Changes in vlc:
===============
* vlc is now a very small program (20 lines) which uses the libvlc API;
it is quite simple for the moment but can be extended in the future.
* interfaces, decoders, video outputs, etc. are now almost the same
objects (yes, I know, this is C++ redone in C) and are structured in
a tree. More about this later, but basically it allows the following
nice features:
- several interfaces
- several playlists with several outputs
- input plugins spawning helper interfaces (will be used for DVD menus)
- anything spawning anything; I swear there are useful uses for this!
* libvlc can be used in other programs; I'm currently writing a Mozilla
plugin for my employer.
Things currently broken:
========================
* most interfaces, most ports
* the playlist handling (almost finished rewriting this though). This means
no file can be played from the GUI, you need to use the commandline. This
also means it segfaults at EOF, when exiting the program, and it sometimes
refuses to open a file when asked to.
2002-06-01 14:32:02 +02:00
|
|
|
VLC_COMMON_MEMBERS
|
2003-08-14 15:02:55 +02:00
|
|
|
/**
|
|
|
|
\name playlist_t
|
|
|
|
These members are uniq to playlist_t
|
|
|
|
*/
|
|
|
|
/*@{*/
|
|
|
|
int i_index; /**< current index into the playlist */
|
2003-10-06 18:23:30 +02:00
|
|
|
int i_enabled; /**< How many items are enabled ? */
|
2004-11-06 12:17:46 +01:00
|
|
|
|
|
|
|
int i_size; /**< total size of the list */
|
2003-08-14 15:02:55 +02:00
|
|
|
playlist_item_t ** pp_items; /**< array of pointers to the
|
|
|
|
* playlist items */
|
2005-04-09 16:53:38 +02:00
|
|
|
int i_all_size; /**< size of list of items and nodes */
|
|
|
|
playlist_item_t ** pp_all_items; /**< array of pointers to the
|
|
|
|
* playlist items and nodes */
|
2004-11-06 12:17:46 +01:00
|
|
|
|
|
|
|
int i_views; /**< Number of views */
|
|
|
|
playlist_view_t ** pp_views; /**< array of pointers to the
|
|
|
|
* playlist views */
|
|
|
|
|
2003-08-14 15:02:55 +02:00
|
|
|
input_thread_t * p_input; /**< the input thread ascosiated
|
|
|
|
* with the current item */
|
2004-11-06 12:17:46 +01:00
|
|
|
|
|
|
|
mtime_t request_date; /**< Used for profiling */
|
|
|
|
|
2004-01-05 13:59:43 +01:00
|
|
|
int i_last_id; /**< Last id to an item */
|
2004-01-10 15:24:33 +01:00
|
|
|
int i_sort; /**< Last sorting applied to the playlist */
|
|
|
|
int i_order; /**< Last ordering applied to the playlist */
|
2004-11-06 12:17:46 +01:00
|
|
|
|
|
|
|
playlist_item_t * p_general; /**< Keep a pointer on the "general"
|
|
|
|
category */
|
|
|
|
|
2004-11-08 19:19:51 +01:00
|
|
|
services_discovery_t **pp_sds;
|
|
|
|
int i_sds;
|
|
|
|
|
2004-11-06 12:17:46 +01:00
|
|
|
vlc_bool_t b_go_next; /*< Go further than the parent node ? */
|
|
|
|
|
|
|
|
struct {
|
|
|
|
/* Current status */
|
|
|
|
playlist_status_t i_status; /**< Current status of playlist */
|
|
|
|
|
|
|
|
/* R/O fields, don't touch if you aren't the playlist thread */
|
|
|
|
/* Use a request */
|
|
|
|
playlist_item_t * p_item; /**< Currently playing/active item */
|
|
|
|
playlist_item_t * p_node; /**< Current node to play from */
|
|
|
|
int i_view; /**< Current view */
|
|
|
|
} status;
|
|
|
|
|
|
|
|
struct {
|
|
|
|
/* Request */
|
|
|
|
/* Playlist thread uses this info to calculate the next position */
|
|
|
|
int i_view; /**< requested view id */
|
|
|
|
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 */
|
|
|
|
int i_goto; /**< Direct index to go to (non-view)*/
|
|
|
|
|
|
|
|
vlc_bool_t b_request; /**< Set to true by the requester
|
|
|
|
The playlist sets it back to false
|
|
|
|
when processing the request */
|
2004-12-10 19:58:22 +01:00
|
|
|
vlc_mutex_t lock; /**< Lock to protect request */
|
2004-11-06 12:17:46 +01:00
|
|
|
} request;
|
|
|
|
|
2004-12-10 19:58:22 +01:00
|
|
|
playlist_preparse_t *p_preparse;
|
|
|
|
|
2005-04-26 16:16:14 +02:00
|
|
|
vlc_mutex_t gc_lock; /**< Lock to protect the garbage collection */
|
|
|
|
|
2005-12-05 16:51:39 +01:00
|
|
|
// The following members are about user interaction
|
|
|
|
// The playlist manages the user interaction to avoid creating another
|
|
|
|
// thread
|
|
|
|
interaction_t *p_interaction;
|
|
|
|
|
2006-01-28 11:45:13 +01:00
|
|
|
global_stats_t *p_stats;
|
|
|
|
|
2003-08-14 15:02:55 +02:00
|
|
|
/*@}*/
|
* ALL: the first libvlc commit.
As for video output 4, this breaks almost everything, but I'll slowly
do what remains to be fixed during the weekend.
Changes in vlc:
===============
* vlc is now a very small program (20 lines) which uses the libvlc API;
it is quite simple for the moment but can be extended in the future.
* interfaces, decoders, video outputs, etc. are now almost the same
objects (yes, I know, this is C++ redone in C) and are structured in
a tree. More about this later, but basically it allows the following
nice features:
- several interfaces
- several playlists with several outputs
- input plugins spawning helper interfaces (will be used for DVD menus)
- anything spawning anything; I swear there are useful uses for this!
* libvlc can be used in other programs; I'm currently writing a Mozilla
plugin for my employer.
Things currently broken:
========================
* most interfaces, most ports
* the playlist handling (almost finished rewriting this though). This means
no file can be played from the GUI, you need to use the commandline. This
also means it segfaults at EOF, when exiting the program, and it sometimes
refuses to open a file when asked to.
2002-06-01 14:32:02 +02:00
|
|
|
};
|
2001-02-08 05:43:28 +01:00
|
|
|
|
2004-11-14 00:06:53 +01:00
|
|
|
/* Helper to add an item */
|
|
|
|
struct playlist_add_t
|
|
|
|
{
|
2005-04-13 19:43:12 +02:00
|
|
|
int i_node;
|
|
|
|
int i_item;
|
2004-11-14 00:06:53 +01:00
|
|
|
int i_view;
|
|
|
|
int i_position;
|
|
|
|
};
|
|
|
|
|
2004-01-10 15:24:33 +01:00
|
|
|
#define SORT_ID 0
|
|
|
|
#define SORT_TITLE 1
|
2004-11-21 18:45:09 +01:00
|
|
|
#define SORT_TITLE_NODES_FIRST 2
|
|
|
|
#define SORT_AUTHOR 3
|
2005-04-10 20:40:52 +02:00
|
|
|
#define SORT_GENRE 4
|
|
|
|
#define SORT_RANDOM 5
|
|
|
|
#define SORT_DURATION 6
|
|
|
|
#define SORT_TITLE_NUMERIC 7
|
2005-09-15 19:42:24 +02:00
|
|
|
#define SORT_ALBUM 8
|
2003-11-26 11:45:21 +01:00
|
|
|
|
2004-01-10 04:36:03 +01:00
|
|
|
#define ORDER_NORMAL 0
|
|
|
|
#define ORDER_REVERSE 1
|
2003-09-08 14:02:16 +02:00
|
|
|
|
2001-02-09 00:40:26 +01:00
|
|
|
/*****************************************************************************
|
|
|
|
* Prototypes
|
|
|
|
*****************************************************************************/
|
2004-11-06 12:17:46 +01:00
|
|
|
|
|
|
|
/* Creation/Deletion */
|
2002-07-31 22:56:53 +02:00
|
|
|
#define playlist_Create(a) __playlist_Create(VLC_OBJECT(a))
|
2002-06-01 20:04:49 +02:00
|
|
|
playlist_t * __playlist_Create ( vlc_object_t * );
|
2004-11-17 22:38:23 +01:00
|
|
|
int playlist_Destroy ( playlist_t * );
|
* ALL: the first libvlc commit.
As for video output 4, this breaks almost everything, but I'll slowly
do what remains to be fixed during the weekend.
Changes in vlc:
===============
* vlc is now a very small program (20 lines) which uses the libvlc API;
it is quite simple for the moment but can be extended in the future.
* interfaces, decoders, video outputs, etc. are now almost the same
objects (yes, I know, this is C++ redone in C) and are structured in
a tree. More about this later, but basically it allows the following
nice features:
- several interfaces
- several playlists with several outputs
- input plugins spawning helper interfaces (will be used for DVD menus)
- anything spawning anything; I swear there are useful uses for this!
* libvlc can be used in other programs; I'm currently writing a Mozilla
plugin for my employer.
Things currently broken:
========================
* most interfaces, most ports
* the playlist handling (almost finished rewriting this though). This means
no file can be played from the GUI, you need to use the commandline. This
also means it segfaults at EOF, when exiting the program, and it sometimes
refuses to open a file when asked to.
2002-06-01 14:32:02 +02:00
|
|
|
|
2004-11-06 12:17:46 +01:00
|
|
|
/* Playlist control */
|
2005-04-09 16:53:38 +02:00
|
|
|
#define playlist_Play(p) playlist_LockControl(p,PLAYLIST_PLAY )
|
|
|
|
#define playlist_Pause(p) playlist_LockControl(p,PLAYLIST_PAUSE )
|
|
|
|
#define playlist_Stop(p) playlist_LockControl(p,PLAYLIST_STOP )
|
|
|
|
#define playlist_Next(p) playlist_LockControl(p,PLAYLIST_SKIP, 1)
|
|
|
|
#define playlist_Prev(p) playlist_LockControl(p,PLAYLIST_SKIP, -1)
|
|
|
|
#define playlist_Skip(p,i) playlist_LockControl(p,PLAYLIST_SKIP, i)
|
|
|
|
#define playlist_Goto(p,i) playlist_LockControl(p,PLAYLIST_GOTO, i)
|
2004-01-05 13:59:43 +01:00
|
|
|
|
2004-11-06 12:17:46 +01:00
|
|
|
VLC_EXPORT( int, playlist_Control, ( playlist_t *, int, ... ) );
|
2005-04-09 16:53:38 +02:00
|
|
|
VLC_EXPORT( int, playlist_LockControl, ( playlist_t *, int, ... ) );
|
2004-11-06 12:17:46 +01:00
|
|
|
|
|
|
|
VLC_EXPORT( int, playlist_Clear, ( playlist_t * ) );
|
2004-12-14 12:40:09 +01:00
|
|
|
VLC_EXPORT( int, playlist_LockClear, ( playlist_t * ) );
|
* ALL: the first libvlc commit.
As for video output 4, this breaks almost everything, but I'll slowly
do what remains to be fixed during the weekend.
Changes in vlc:
===============
* vlc is now a very small program (20 lines) which uses the libvlc API;
it is quite simple for the moment but can be extended in the future.
* interfaces, decoders, video outputs, etc. are now almost the same
objects (yes, I know, this is C++ redone in C) and are structured in
a tree. More about this later, but basically it allows the following
nice features:
- several interfaces
- several playlists with several outputs
- input plugins spawning helper interfaces (will be used for DVD menus)
- anything spawning anything; I swear there are useful uses for this!
* libvlc can be used in other programs; I'm currently writing a Mozilla
plugin for my employer.
Things currently broken:
========================
* most interfaces, most ports
* the playlist handling (almost finished rewriting this though). This means
no file can be played from the GUI, you need to use the commandline. This
also means it segfaults at EOF, when exiting the program, and it sometimes
refuses to open a file when asked to.
2002-06-01 14:32:02 +02:00
|
|
|
|
2004-12-10 19:58:22 +01:00
|
|
|
VLC_EXPORT( int, playlist_PreparseEnqueue, (playlist_t *, input_item_t *) );
|
2005-08-20 12:17:20 +02:00
|
|
|
VLC_EXPORT( int, playlist_PreparseEnqueueItem, (playlist_t *, playlist_item_t *) );
|
2004-01-05 13:59:43 +01:00
|
|
|
|
2004-11-08 19:19:51 +01:00
|
|
|
/* Services discovery */
|
|
|
|
|
|
|
|
VLC_EXPORT( int, playlist_ServicesDiscoveryAdd, (playlist_t *, const char *));
|
2004-11-17 22:38:23 +01:00
|
|
|
VLC_EXPORT( int, playlist_ServicesDiscoveryRemove, (playlist_t *, const char *));
|
2004-11-08 19:19:51 +01:00
|
|
|
VLC_EXPORT( int, playlist_AddSDModules, (playlist_t *, char *));
|
2004-11-09 00:47:32 +01:00
|
|
|
VLC_EXPORT( vlc_bool_t, playlist_IsServicesDiscoveryLoaded, ( playlist_t *,const char *));
|
|
|
|
|
2004-11-08 19:19:51 +01:00
|
|
|
|
2004-11-06 12:17:46 +01:00
|
|
|
/* Item management functions (act on items) */
|
Options as infos were bad in several ways: it broke PLAYLIST_GO, used
much memory, and was inconsistent, especially with input_CreateThread
taking an array of options
* Revert to using array of options
* To add an item with options:
- either use playlist_ItemNew, ItemAddOption, and then AddItem
(useful if you don't have all your options in an array)
- either use playlist_AddExt (use this if all your options are
already in an array)
* To add an item without options: use playlist_Add
You can still add options after an item has been added by using either
playlist_AddOption or playlist_ItemAddOption
* Attempt to improve API and solve thread safety issues.
- playlist_Item* functions allow to touch items only.
p_item->lock must be used when needed
(playlist_ItemNew, playlist_ItemDelete, playlist_Item*Info,
playlist_ItemSet* )
- playlist_ItemGetById and ItemGetByPos give you playlist_items
for GetByPos, you should have the playlist lock
At the moment, the playlist_Set* and playlist_*Info functions are kept (they work with position) but should be avoided.
2004-01-29 18:51:08 +01:00
|
|
|
#define playlist_AddItem(p,pi,i1,i2) playlist_ItemAdd(p,pi,i1,i2)
|
|
|
|
#define playlist_ItemNew( a , b, c ) __playlist_ItemNew(VLC_OBJECT(a) , b , c )
|
2005-04-10 10:19:49 +02:00
|
|
|
#define playlist_ItemCopy( a, b ) __playlist_ItemCopy(VLC_OBJECT(a), b )
|
Options as infos were bad in several ways: it broke PLAYLIST_GO, used
much memory, and was inconsistent, especially with input_CreateThread
taking an array of options
* Revert to using array of options
* To add an item with options:
- either use playlist_ItemNew, ItemAddOption, and then AddItem
(useful if you don't have all your options in an array)
- either use playlist_AddExt (use this if all your options are
already in an array)
* To add an item without options: use playlist_Add
You can still add options after an item has been added by using either
playlist_AddOption or playlist_ItemAddOption
* Attempt to improve API and solve thread safety issues.
- playlist_Item* functions allow to touch items only.
p_item->lock must be used when needed
(playlist_ItemNew, playlist_ItemDelete, playlist_Item*Info,
playlist_ItemSet* )
- playlist_ItemGetById and ItemGetByPos give you playlist_items
for GetByPos, you should have the playlist lock
At the moment, the playlist_Set* and playlist_*Info functions are kept (they work with position) but should be avoided.
2004-01-29 18:51:08 +01:00
|
|
|
VLC_EXPORT( playlist_item_t* , __playlist_ItemNew, ( vlc_object_t *,const char *,const char * ) );
|
2005-04-10 10:19:49 +02:00
|
|
|
VLC_EXPORT( playlist_item_t* , __playlist_ItemCopy, ( vlc_object_t *,playlist_item_t* ) );
|
2004-12-20 21:14:43 +01:00
|
|
|
VLC_EXPORT( playlist_item_t* , playlist_ItemNewWithType, ( vlc_object_t *,const char *,const char *, int ) );
|
2004-11-17 22:38:23 +01:00
|
|
|
VLC_EXPORT( int, playlist_ItemDelete, ( playlist_item_t * ) );
|
|
|
|
VLC_EXPORT( int, playlist_ItemAddParent, ( playlist_item_t *, int,playlist_item_t *) );
|
|
|
|
VLC_EXPORT( int, playlist_CopyParents, ( playlist_item_t *,playlist_item_t *) );
|
2004-11-06 12:17:46 +01:00
|
|
|
/* Item informations accessors */
|
|
|
|
VLC_EXPORT( int, playlist_ItemSetName, (playlist_item_t *, char * ) );
|
|
|
|
VLC_EXPORT( int, playlist_ItemSetDuration, (playlist_item_t *, mtime_t ) );
|
|
|
|
|
Options as infos were bad in several ways: it broke PLAYLIST_GO, used
much memory, and was inconsistent, especially with input_CreateThread
taking an array of options
* Revert to using array of options
* To add an item with options:
- either use playlist_ItemNew, ItemAddOption, and then AddItem
(useful if you don't have all your options in an array)
- either use playlist_AddExt (use this if all your options are
already in an array)
* To add an item without options: use playlist_Add
You can still add options after an item has been added by using either
playlist_AddOption or playlist_ItemAddOption
* Attempt to improve API and solve thread safety issues.
- playlist_Item* functions allow to touch items only.
p_item->lock must be used when needed
(playlist_ItemNew, playlist_ItemDelete, playlist_Item*Info,
playlist_ItemSet* )
- playlist_ItemGetById and ItemGetByPos give you playlist_items
for GetByPos, you should have the playlist lock
At the moment, the playlist_Set* and playlist_*Info functions are kept (they work with position) but should be avoided.
2004-01-29 18:51:08 +01:00
|
|
|
|
2004-11-06 12:17:46 +01:00
|
|
|
/* View management functions */
|
|
|
|
VLC_EXPORT( int, playlist_ViewInsert, (playlist_t *, int, char * ) );
|
2004-11-17 22:38:23 +01:00
|
|
|
VLC_EXPORT( int, playlist_ViewDelete, (playlist_t *,playlist_view_t* ) );
|
2004-11-06 12:17:46 +01:00
|
|
|
VLC_EXPORT( playlist_view_t *, playlist_ViewFind, (playlist_t *, int ) );
|
|
|
|
VLC_EXPORT( int, playlist_ViewUpdate, (playlist_t *, int ) );
|
2004-11-17 22:38:23 +01:00
|
|
|
VLC_EXPORT( int, playlist_ViewDump, (playlist_t *, playlist_view_t * ) );
|
2004-11-06 12:17:46 +01:00
|
|
|
VLC_EXPORT( int, playlist_ViewEmpty, (playlist_t *, int, vlc_bool_t ) );
|
|
|
|
|
|
|
|
/* Node management */
|
|
|
|
VLC_EXPORT( playlist_item_t *, playlist_NodeCreate, ( playlist_t *,int,char *, playlist_item_t * p_parent ) );
|
|
|
|
VLC_EXPORT( int, playlist_NodeAppend, (playlist_t *,int,playlist_item_t*,playlist_item_t *) );
|
|
|
|
VLC_EXPORT( int, playlist_NodeInsert, (playlist_t *,int,playlist_item_t*,playlist_item_t *, int) );
|
|
|
|
VLC_EXPORT( int, playlist_NodeRemoveItem, (playlist_t *,playlist_item_t*,playlist_item_t *) );
|
2005-07-01 22:48:48 +02:00
|
|
|
VLC_EXPORT( int, playlist_NodeRemoveParent, (playlist_t *,playlist_item_t*,playlist_item_t *) );
|
2004-11-06 12:17:46 +01:00
|
|
|
VLC_EXPORT( int, playlist_NodeChildrenCount, (playlist_t *,playlist_item_t* ) );
|
|
|
|
VLC_EXPORT( playlist_item_t *, playlist_ChildSearchName, (playlist_item_t*, const char* ) );
|
2005-02-06 13:05:43 +01:00
|
|
|
VLC_EXPORT( int, playlist_NodeDelete, ( playlist_t *, playlist_item_t *, vlc_bool_t , vlc_bool_t ) );
|
2004-11-06 12:17:46 +01:00
|
|
|
VLC_EXPORT( int, playlist_NodeEmpty, ( playlist_t *, playlist_item_t *, vlc_bool_t ) );
|
|
|
|
|
|
|
|
/* Tree walking */
|
|
|
|
playlist_item_t *playlist_FindNextFromParent( playlist_t *p_playlist,
|
|
|
|
int i_view,
|
|
|
|
playlist_item_t *p_root,
|
|
|
|
playlist_item_t *p_node,
|
|
|
|
playlist_item_t *p_item );
|
|
|
|
playlist_item_t *playlist_FindPrevFromParent( playlist_t *p_playlist,
|
|
|
|
int i_view,
|
|
|
|
playlist_item_t *p_root,
|
|
|
|
playlist_item_t *p_node,
|
|
|
|
playlist_item_t *p_item );
|
|
|
|
|
|
|
|
|
|
|
|
/* Simple add/remove functions */
|
|
|
|
/* These functions add the item to the "simple" view (+all & category )*/
|
2004-01-05 13:59:43 +01:00
|
|
|
VLC_EXPORT( int, playlist_Add, ( playlist_t *, const char *, const char *, int, int ) );
|
Options as infos were bad in several ways: it broke PLAYLIST_GO, used
much memory, and was inconsistent, especially with input_CreateThread
taking an array of options
* Revert to using array of options
* To add an item with options:
- either use playlist_ItemNew, ItemAddOption, and then AddItem
(useful if you don't have all your options in an array)
- either use playlist_AddExt (use this if all your options are
already in an array)
* To add an item without options: use playlist_Add
You can still add options after an item has been added by using either
playlist_AddOption or playlist_ItemAddOption
* Attempt to improve API and solve thread safety issues.
- playlist_Item* functions allow to touch items only.
p_item->lock must be used when needed
(playlist_ItemNew, playlist_ItemDelete, playlist_Item*Info,
playlist_ItemSet* )
- playlist_ItemGetById and ItemGetByPos give you playlist_items
for GetByPos, you should have the playlist lock
At the moment, the playlist_Set* and playlist_*Info functions are kept (they work with position) but should be avoided.
2004-01-29 18:51:08 +01:00
|
|
|
VLC_EXPORT( int, playlist_AddExt, ( playlist_t *, const char *, const char *, int, int, mtime_t, const char **,int ) );
|
2004-11-06 12:17:46 +01:00
|
|
|
VLC_EXPORT( int, playlist_ItemAdd, ( playlist_t *, playlist_item_t *, int, int ) );
|
|
|
|
VLC_EXPORT(int, playlist_NodeAddItem, ( playlist_t *, playlist_item_t *,int,playlist_item_t *,int , int ) );
|
Options as infos were bad in several ways: it broke PLAYLIST_GO, used
much memory, and was inconsistent, especially with input_CreateThread
taking an array of options
* Revert to using array of options
* To add an item with options:
- either use playlist_ItemNew, ItemAddOption, and then AddItem
(useful if you don't have all your options in an array)
- either use playlist_AddExt (use this if all your options are
already in an array)
* To add an item without options: use playlist_Add
You can still add options after an item has been added by using either
playlist_AddOption or playlist_ItemAddOption
* Attempt to improve API and solve thread safety issues.
- playlist_Item* functions allow to touch items only.
p_item->lock must be used when needed
(playlist_ItemNew, playlist_ItemDelete, playlist_Item*Info,
playlist_ItemSet* )
- playlist_ItemGetById and ItemGetByPos give you playlist_items
for GetByPos, you should have the playlist lock
At the moment, the playlist_Set* and playlist_*Info functions are kept (they work with position) but should be avoided.
2004-01-29 18:51:08 +01:00
|
|
|
|
2004-11-06 12:17:46 +01:00
|
|
|
/* Misc item operations (act on item+playlist) */
|
2002-06-04 02:11:12 +02:00
|
|
|
VLC_EXPORT( int, playlist_Delete, ( playlist_t *, int ) );
|
2004-12-14 12:40:09 +01:00
|
|
|
VLC_EXPORT( int, playlist_LockDelete, ( playlist_t *, int ) );
|
2004-11-06 12:17:46 +01:00
|
|
|
VLC_EXPORT( int, playlist_Disable, ( playlist_t *, playlist_item_t * ) );
|
|
|
|
VLC_EXPORT( int, playlist_Enable, ( playlist_t *, playlist_item_t * ) );
|
2004-11-17 22:38:23 +01:00
|
|
|
VLC_EXPORT( int, playlist_ItemToNode, (playlist_t *,playlist_item_t *) );
|
2004-12-14 12:40:09 +01:00
|
|
|
VLC_EXPORT( int, playlist_LockItemToNode, (playlist_t *,playlist_item_t *) );
|
2004-11-17 22:38:23 +01:00
|
|
|
VLC_EXPORT( int, playlist_Replace, (playlist_t *,playlist_item_t *, input_item_t*) );
|
2004-12-14 12:40:09 +01:00
|
|
|
VLC_EXPORT( int, playlist_LockReplace, (playlist_t *,playlist_item_t *, input_item_t*) );
|
Options as infos were bad in several ways: it broke PLAYLIST_GO, used
much memory, and was inconsistent, especially with input_CreateThread
taking an array of options
* Revert to using array of options
* To add an item with options:
- either use playlist_ItemNew, ItemAddOption, and then AddItem
(useful if you don't have all your options in an array)
- either use playlist_AddExt (use this if all your options are
already in an array)
* To add an item without options: use playlist_Add
You can still add options after an item has been added by using either
playlist_AddOption or playlist_ItemAddOption
* Attempt to improve API and solve thread safety issues.
- playlist_Item* functions allow to touch items only.
p_item->lock must be used when needed
(playlist_ItemNew, playlist_ItemDelete, playlist_Item*Info,
playlist_ItemSet* )
- playlist_ItemGetById and ItemGetByPos give you playlist_items
for GetByPos, you should have the playlist lock
At the moment, the playlist_Set* and playlist_*Info functions are kept (they work with position) but should be avoided.
2004-01-29 18:51:08 +01:00
|
|
|
|
2004-01-05 13:59:43 +01:00
|
|
|
|
|
|
|
/* Item search functions */
|
Options as infos were bad in several ways: it broke PLAYLIST_GO, used
much memory, and was inconsistent, especially with input_CreateThread
taking an array of options
* Revert to using array of options
* To add an item with options:
- either use playlist_ItemNew, ItemAddOption, and then AddItem
(useful if you don't have all your options in an array)
- either use playlist_AddExt (use this if all your options are
already in an array)
* To add an item without options: use playlist_Add
You can still add options after an item has been added by using either
playlist_AddOption or playlist_ItemAddOption
* Attempt to improve API and solve thread safety issues.
- playlist_Item* functions allow to touch items only.
p_item->lock must be used when needed
(playlist_ItemNew, playlist_ItemDelete, playlist_Item*Info,
playlist_ItemSet* )
- playlist_ItemGetById and ItemGetByPos give you playlist_items
for GetByPos, you should have the playlist lock
At the moment, the playlist_Set* and playlist_*Info functions are kept (they work with position) but should be avoided.
2004-01-29 18:51:08 +01:00
|
|
|
VLC_EXPORT( playlist_item_t *, playlist_ItemGetById, (playlist_t *, int) );
|
2004-12-14 12:40:09 +01:00
|
|
|
VLC_EXPORT( playlist_item_t *, playlist_LockItemGetById, (playlist_t *, int) );
|
Options as infos were bad in several ways: it broke PLAYLIST_GO, used
much memory, and was inconsistent, especially with input_CreateThread
taking an array of options
* Revert to using array of options
* To add an item with options:
- either use playlist_ItemNew, ItemAddOption, and then AddItem
(useful if you don't have all your options in an array)
- either use playlist_AddExt (use this if all your options are
already in an array)
* To add an item without options: use playlist_Add
You can still add options after an item has been added by using either
playlist_AddOption or playlist_ItemAddOption
* Attempt to improve API and solve thread safety issues.
- playlist_Item* functions allow to touch items only.
p_item->lock must be used when needed
(playlist_ItemNew, playlist_ItemDelete, playlist_Item*Info,
playlist_ItemSet* )
- playlist_ItemGetById and ItemGetByPos give you playlist_items
for GetByPos, you should have the playlist lock
At the moment, the playlist_Set* and playlist_*Info functions are kept (they work with position) but should be avoided.
2004-01-29 18:51:08 +01:00
|
|
|
VLC_EXPORT( playlist_item_t *, playlist_ItemGetByPos, (playlist_t *, int) );
|
2004-12-14 12:40:09 +01:00
|
|
|
VLC_EXPORT( playlist_item_t *, playlist_LockItemGetByPos, (playlist_t *, int) );
|
2004-11-14 00:06:53 +01:00
|
|
|
VLC_EXPORT( playlist_item_t *, playlist_ItemGetByInput, (playlist_t *,input_item_t * ) );
|
2004-12-14 12:40:09 +01:00
|
|
|
VLC_EXPORT( playlist_item_t *, playlist_LockItemGetByInput, (playlist_t *,input_item_t * ) );
|
|
|
|
VLC_EXPORT( int, playlist_GetPositionById, (playlist_t *,int ) );
|
* src/playlist/* && Makefile.am
- splitted the enormous playlist.c file
- implemented a better item group system: groups have a name
and must be created before use by
playlist_CreateGroup( p_playlist, "newgroupname")
* modules/misc/sap.c
- Create our own playlist group ("SAP") and use it
* modules/access/slp.c
- Create our own playlist group ("SLP") and use it
* modules/demux/util/id3tag.c
- Trigger playlist update when we have parsed our tag
* modules/gui/wxwindows/interface.cpp
- Fixed the about box by using vlc_wraptext
- Added the simple open and the streaming wizard icons
*** Icons need to be changed ! ***
- Added the visualization to the extended gui
* modules/gui/wxwindows/preferences.cpp && include/vlc_help.h
- Enlarged the window to fit the wrapped text
- Added help for audio encoders
* modules/gui/wxwindows/stream.cpp & open.cpp & include/vlc_interface.h
- Created a "streaming wizard" window (3-step streaming)
* modules/gui/wxwindows/iteminfo.cpp:
- Group change is now based on the name
* modules/gui/wxwindows/playlist.cpp
- Added author and group columns to the listview
- Redesigned the window
- Added the Sort menu with several criteria (title, author, group)
- Added up/down buttons to move an item in the playlist
- Added the group menu to enable/disable a group in an understandable way
TODO:
-----
* playlist core :
- Implement advanced sort capabilities (multi-criteria)
- File format to save the new features
- export playlist (to M3U, eg)
- more robust group creation (duplicates check, ...)
* wxWindows playlist:
The idea of a treeview seems impossible, because of wxWindow's treeview,
that don't allow multi-selection, and, as far as I know, multi-columns.
- Provide a frontend to advanced sort (when it's done :-) )
- Allow moving items by drag & drop (well, if possible, haven't checked yet)
- Allow moving several items at once
- Customizable listview (ability to remove/move columns)
- Find a solution to the focus problem
(when you change track, the selected one scrolls at the
bottom of the visible screen)
* wxWindows interface:
- New icons, our icons begin to get old and not so pretty
- Find a solution for the volume bar (nobody understands what it is)
2003-10-29 18:32:55 +01:00
|
|
|
|
Options as infos were bad in several ways: it broke PLAYLIST_GO, used
much memory, and was inconsistent, especially with input_CreateThread
taking an array of options
* Revert to using array of options
* To add an item with options:
- either use playlist_ItemNew, ItemAddOption, and then AddItem
(useful if you don't have all your options in an array)
- either use playlist_AddExt (use this if all your options are
already in an array)
* To add an item without options: use playlist_Add
You can still add options after an item has been added by using either
playlist_AddOption or playlist_ItemAddOption
* Attempt to improve API and solve thread safety issues.
- playlist_Item* functions allow to touch items only.
p_item->lock must be used when needed
(playlist_ItemNew, playlist_ItemDelete, playlist_Item*Info,
playlist_ItemSet* )
- playlist_ItemGetById and ItemGetByPos give you playlist_items
for GetByPos, you should have the playlist lock
At the moment, the playlist_Set* and playlist_*Info functions are kept (they work with position) but should be avoided.
2004-01-29 18:51:08 +01:00
|
|
|
VLC_EXPORT( int, playlist_ItemAddOption, (playlist_item_t *, const char *) );
|
2004-01-05 13:59:43 +01:00
|
|
|
|
|
|
|
/* Playlist sorting */
|
2004-01-10 15:24:33 +01:00
|
|
|
#define playlist_SortID(p, i) playlist_Sort( p, SORT_ID, i)
|
2003-11-26 11:45:21 +01:00
|
|
|
#define playlist_SortTitle(p, i) playlist_Sort( p, SORT_TITLE, i)
|
|
|
|
#define playlist_SortAuthor(p, i) playlist_Sort( p, SORT_AUTHOR, i)
|
2005-09-15 19:42:24 +02:00
|
|
|
#define playlist_SortAlbum(p, i) playlist_Sort( p, SORT_ALBUM, i)
|
2003-11-26 11:45:21 +01:00
|
|
|
#define playlist_SortGroup(p, i) playlist_Sort( p, SORT_GROUP, i)
|
|
|
|
VLC_EXPORT( int, playlist_Sort, ( playlist_t *, int, int) );
|
2003-03-17 18:10:21 +01:00
|
|
|
VLC_EXPORT( int, playlist_Move, ( playlist_t *, int, int ) );
|
2006-03-04 18:00:41 +01:00
|
|
|
VLC_EXPORT( int, playlist_TreeMove, ( playlist_t *, playlist_item_t *, playlist_item_t *, int, int ) );
|
2004-11-06 12:17:46 +01:00
|
|
|
VLC_EXPORT( int, playlist_NodeGroup, ( playlist_t *, int,playlist_item_t *,playlist_item_t **,int, int, int ) );
|
2004-11-21 18:45:09 +01:00
|
|
|
VLC_EXPORT( int, playlist_NodeSort, ( playlist_t *, playlist_item_t *,int, int ) );
|
2004-11-22 10:37:58 +01:00
|
|
|
VLC_EXPORT( int, playlist_RecursiveNodeSort, ( playlist_t *, playlist_item_t *,int, int ) );
|
2004-01-05 13:59:43 +01:00
|
|
|
|
|
|
|
/* Load/Save */
|
2004-01-11 01:45:06 +01:00
|
|
|
VLC_EXPORT( int, playlist_Import, ( playlist_t *, const char * ) );
|
|
|
|
VLC_EXPORT( int, playlist_Export, ( playlist_t *, const char *, const char * ) );
|
2003-01-29 12:34:11 +01:00
|
|
|
|
2004-11-06 12:17:46 +01:00
|
|
|
/***********************************************************************
|
|
|
|
* Inline functions
|
|
|
|
***********************************************************************/
|
|
|
|
|
|
|
|
|
2003-08-14 15:02:55 +02:00
|
|
|
/**
|
|
|
|
* tell if a playlist is currently playing.
|
|
|
|
* \param p_playlist the playlist to check
|
|
|
|
* \return true if playlist is playing, false otherwise
|
|
|
|
*/
|
2003-01-29 12:34:11 +01:00
|
|
|
static inline vlc_bool_t playlist_IsPlaying( playlist_t * p_playlist )
|
|
|
|
{
|
|
|
|
vlc_bool_t b_playing;
|
|
|
|
|
|
|
|
vlc_mutex_lock( &p_playlist->object_lock );
|
2004-11-06 12:17:46 +01:00
|
|
|
b_playing = p_playlist->status.i_status == PLAYLIST_RUNNING;
|
2003-01-29 12:34:11 +01:00
|
|
|
vlc_mutex_unlock( &p_playlist->object_lock );
|
|
|
|
|
|
|
|
return( b_playing );
|
|
|
|
}
|
|
|
|
|
2003-08-14 15:02:55 +02:00
|
|
|
/**
|
|
|
|
* tell if a playlist is currently empty
|
|
|
|
* \param p_playlist the playlist to check
|
|
|
|
* \return true if the playlist is empty, false otherwise
|
|
|
|
*/
|
2003-01-29 12:34:11 +01:00
|
|
|
static inline vlc_bool_t playlist_IsEmpty( playlist_t * p_playlist )
|
|
|
|
{
|
|
|
|
vlc_bool_t b_empty;
|
|
|
|
|
|
|
|
vlc_mutex_lock( &p_playlist->object_lock );
|
|
|
|
b_empty = p_playlist->i_size == 0;
|
|
|
|
vlc_mutex_unlock( &p_playlist->object_lock );
|
|
|
|
|
|
|
|
return( b_empty );
|
|
|
|
}
|
2003-08-14 15:02:55 +02:00
|
|
|
|
2004-12-14 18:42:42 +01:00
|
|
|
|
|
|
|
|
2003-08-14 15:02:55 +02:00
|
|
|
/**
|
|
|
|
* @}
|
|
|
|
*/
|