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
|
|
|
*****************************************************************************
|
* 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
|
|
|
* Copyright (C) 1999, 2000, 2001, 2002 VideoLAN
|
2003-09-08 14:02:16 +02:00
|
|
|
* $Id: vlc_playlist.h,v 1.13 2003/09/08 12:02:16 zorglub Exp $
|
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.
|
|
|
|
*
|
|
|
|
* 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
|
|
|
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
|
|
|
|
*****************************************************************************/
|
|
|
|
|
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
|
|
|
|
* @{
|
|
|
|
*/
|
|
|
|
|
|
|
|
/**
|
|
|
|
* playlist item
|
|
|
|
* \see playlist_t
|
|
|
|
*/
|
2002-07-20 20:01:43 +02:00
|
|
|
struct playlist_item_t
|
2001-02-08 05:43:28 +01:00
|
|
|
{
|
2003-08-14 15:02:55 +02:00
|
|
|
char * psz_name; /**< text describing this item */
|
|
|
|
char * psz_uri; /**< mrl of this item */
|
|
|
|
mtime_t i_duration; /**< A hint about the duration of this
|
|
|
|
* item, in miliseconds*/
|
|
|
|
char ** ppsz_options; /**< options passed with the :foo=bar syntax */
|
|
|
|
int i_options; /**< number of items in the
|
|
|
|
* ppsz_options array */
|
|
|
|
int i_type; /**< unused yet */
|
|
|
|
int i_status; /**< unused yet */
|
|
|
|
vlc_bool_t b_autodeletion; /**< Indicates wether this item is to
|
|
|
|
* be deleted after playback. True mean
|
|
|
|
* that this item is to be deleted
|
|
|
|
* after playback, false otherwise */
|
* 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
|
|
|
|
2003-08-14 15:02:55 +02:00
|
|
|
/**
|
|
|
|
* Playlist status
|
|
|
|
*/
|
|
|
|
typedef enum { PLAYLIST_STOPPED,PLAYLIST_RUNNING,PLAYLIST_PAUSED } playlist_status_t;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 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 */
|
|
|
|
playlist_status_t i_status; /**< current status of playlist */
|
|
|
|
int i_size; /**< total size of the list */
|
* 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
|
|
|
|
2003-08-14 15:02:55 +02:00
|
|
|
playlist_item_t ** pp_items; /**< array of pointers to the
|
|
|
|
* playlist items */
|
2001-02-08 05:43:28 +01:00
|
|
|
|
2003-08-14 15:02:55 +02:00
|
|
|
input_thread_t * p_input; /**< the input thread ascosiated
|
|
|
|
* with the current item */
|
|
|
|
/*@}*/
|
* 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
|
|
|
|
2003-09-08 14:02:16 +02:00
|
|
|
#define SORT_NORMAL 0
|
|
|
|
#define SORT_REVERSE 1
|
|
|
|
|
2001-02-09 00:40:26 +01:00
|
|
|
/*****************************************************************************
|
|
|
|
* Prototypes
|
|
|
|
*****************************************************************************/
|
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 * );
|
|
|
|
void 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
|
|
|
|
|
|
|
#define playlist_Play(p) playlist_Command(p,PLAYLIST_PLAY,0)
|
|
|
|
#define playlist_Pause(p) playlist_Command(p,PLAYLIST_PAUSE,0)
|
|
|
|
#define playlist_Stop(p) playlist_Command(p,PLAYLIST_STOP,0)
|
|
|
|
#define playlist_Next(p) playlist_Command(p,PLAYLIST_SKIP,1)
|
|
|
|
#define playlist_Prev(p) playlist_Command(p,PLAYLIST_SKIP,-1)
|
|
|
|
#define playlist_Skip(p,i) playlist_Command(p,PLAYLIST_SKIP,i)
|
|
|
|
#define playlist_Goto(p,i) playlist_Command(p,PLAYLIST_GOTO,i)
|
2003-08-14 15:02:55 +02:00
|
|
|
VLC_EXPORT( void, playlist_Command, ( playlist_t *, playlist_command_t, int ) );
|
* 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
|
|
|
|
2003-07-23 03:13:48 +02:00
|
|
|
VLC_EXPORT( int, playlist_Add, ( playlist_t *, const char *, const char **, int, int, int ) );
|
2003-08-14 15:02:55 +02:00
|
|
|
VLC_EXPORT( int, playlist_AddExt, ( playlist_t *, const char *, const char *, mtime_t, const char **, int, int, int ) );
|
2002-12-04 00:36:41 +01:00
|
|
|
VLC_EXPORT( int, playlist_AddItem, ( playlist_t *, playlist_item_t *, int, int ) );
|
2002-06-04 02:11:12 +02:00
|
|
|
VLC_EXPORT( int, playlist_Delete, ( playlist_t *, int ) );
|
2003-09-08 14:02:16 +02:00
|
|
|
VLC_EXPORT( int, playlist_Sort, ( playlist_t *, int) );
|
2003-03-17 18:10:21 +01:00
|
|
|
VLC_EXPORT( int, playlist_Move, ( playlist_t *, int, int ) );
|
2002-12-13 17:26:35 +01:00
|
|
|
VLC_EXPORT( int, playlist_LoadFile, ( playlist_t *, const char * ) );
|
|
|
|
VLC_EXPORT( int, playlist_SaveFile, ( playlist_t *, const char * ) );
|
2003-01-29 12:34:11 +01:00
|
|
|
|
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 );
|
|
|
|
b_playing = p_playlist->i_status == PLAYLIST_RUNNING;
|
|
|
|
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
|
|
|
|
|
|
|
/**
|
|
|
|
* @}
|
|
|
|
*/
|