vlc_playlist.h
上传用户:riyaled888
上传日期:2009-03-27
资源大小:7338k
文件大小:9k
源码类别:

多媒体

开发平台:

MultiPlatform

  1. /*****************************************************************************
  2.  * vlc_playlist.h : Playlist functions
  3.  *****************************************************************************
  4.  * Copyright (C) 1999-2004 VideoLAN
  5.  * $Id: vlc_playlist.h 8193 2004-07-16 11:33:32Z sam $
  6.  *
  7.  * Authors: Samuel Hocevar <sam@zoy.org>
  8.  *
  9.  * This program is free software; you can redistribute it and/or modify
  10.  * it under the terms of the GNU General Public License as published by
  11.  * the Free Software Foundation; either version 2 of the License, or
  12.  * (at your option) any later version.
  13.  *
  14.  * This program is distributed in the hope that it will be useful,
  15.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17.  * GNU General Public License for more details.
  18.  *
  19.  * You should have received a copy of the GNU General Public License
  20.  * along with this program; if not, write to the Free Software
  21.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
  22.  *****************************************************************************/
  23. /**
  24.  *  file
  25.  *  This file contain structures and function prototypes related
  26.  *  to the playlist in vlc
  27.  */
  28. /**
  29.  * defgroup vlc_playlist Playlist
  30.  * Brief description. Longer description
  31.  * @{
  32.  */
  33. /**
  34.  * playlist export helper structure
  35.  */
  36. struct playlist_export_t
  37. {
  38.     char *psz_filename;
  39.     FILE *p_file;
  40. };
  41. /**
  42.  * playlist item
  43.  * see playlist_t
  44.  */
  45. struct playlist_item_t
  46. {
  47.     input_item_t input;        /**< input item descriptor */
  48.     int        i_nb_played;    /**< How many times was this item played ? */
  49.     vlc_bool_t b_autodeletion; /**< Indicates whther this item is to
  50.                                 * be deleted after playback. True mean
  51.                                 * that this item is to be deleted
  52.                                 * after playback, false otherwise */
  53.     vlc_bool_t b_enabled;      /**< Indicates whether this item is to be
  54.                                 * played or skipped */
  55.     int        i_group;        /**< Which group does this item belongs to ? */
  56.     int        i_id;           /**< Unique id to track this item */
  57. };
  58. /**
  59.  * playlist group
  60.  * see playlist_t
  61.  */
  62. struct playlist_group_t
  63. {
  64.     char *   psz_name;        /**< name of the group */
  65.     int      i_id;            /**< Identifier for the group */
  66. };
  67. /**
  68.  * Playlist status
  69.  */
  70. typedef enum { PLAYLIST_STOPPED,PLAYLIST_RUNNING,PLAYLIST_PAUSED } playlist_status_t;
  71. /**
  72.  * Structure containing information about the playlist
  73.  */
  74. struct playlist_t
  75. {
  76.     VLC_COMMON_MEMBERS
  77. /**
  78.    name playlist_t
  79.    These members are uniq to playlist_t
  80. */
  81. /*@{*/
  82.     int                   i_index;  /**< current index into the playlist */
  83.     playlist_status_t     i_status; /**< current status of playlist */
  84.     int                   i_size;   /**< total size of the list */
  85.     int                   i_enabled; /**< How many items are enabled ? */
  86.     playlist_item_t **    pp_items; /**< array of pointers to the
  87.                                      * playlist items */
  88.     int                   i_groups; /**< How many groups are in the playlist */
  89.     playlist_group_t **   pp_groups;/**< array of pointers to the playlist
  90.                                      * groups */
  91.     int                   i_last_group; /**< Maximal group id given */
  92.     input_thread_t *      p_input;  /**< the input thread ascosiated
  93.                                      * with the current item */
  94.     int                   i_last_id; /**< Last id to an item */
  95.     int                   i_sort; /**< Last sorting applied to the playlist */
  96.     int                   i_order; /**< Last ordering applied to the playlist */
  97.     /*@}*/
  98. };
  99. #define SORT_ID 0
  100. #define SORT_TITLE 1
  101. #define SORT_AUTHOR 2
  102. #define SORT_GROUP 3
  103. #define SORT_RANDOM 4
  104. #define SORT_DURATION 5
  105. #define ORDER_NORMAL 0
  106. #define ORDER_REVERSE 1
  107. #define PLAYLIST_TYPE_MANUAL 1
  108. #define PLAYLIST_TYPE_SAP 2
  109. /*****************************************************************************
  110.  * Prototypes
  111.  *****************************************************************************/
  112. #define playlist_Create(a) __playlist_Create(VLC_OBJECT(a))
  113. playlist_t * __playlist_Create   ( vlc_object_t * );
  114. void           playlist_Destroy  ( playlist_t * );
  115. #define playlist_Play(p) playlist_Command(p,PLAYLIST_PLAY,0)
  116. #define playlist_Pause(p) playlist_Command(p,PLAYLIST_PAUSE,0)
  117. #define playlist_Stop(p) playlist_Command(p,PLAYLIST_STOP,0)
  118. #define playlist_Next(p) playlist_Command(p,PLAYLIST_SKIP,1)
  119. #define playlist_Prev(p) playlist_Command(p,PLAYLIST_SKIP,-1)
  120. #define playlist_Skip(p,i) playlist_Command(p,PLAYLIST_SKIP,i)
  121. #define playlist_Goto(p,i) playlist_Command(p,PLAYLIST_GOTO,i)
  122. VLC_EXPORT( void, playlist_Command, ( playlist_t *, playlist_command_t, int ) );
  123. /* Item management functions */
  124. #define playlist_AddItem(p,pi,i1,i2) playlist_ItemAdd(p,pi,i1,i2)
  125. #define playlist_ItemNew( a , b, c ) __playlist_ItemNew(VLC_OBJECT(a) , b , c )
  126. VLC_EXPORT( playlist_item_t* , __playlist_ItemNew, ( vlc_object_t *,const char *,const char * ) );
  127. VLC_EXPORT( void, playlist_ItemDelete, ( playlist_item_t * ) );
  128. VLC_EXPORT( int,  playlist_ItemAdd, ( playlist_t *, playlist_item_t *, int, int ) );
  129. /* Simple add/remove funcctions */
  130. VLC_EXPORT( int,  playlist_Add,    ( playlist_t *, const char *, const char *, int, int ) );
  131. VLC_EXPORT( int,  playlist_AddExt, ( playlist_t *, const char *, const char *, int, int, mtime_t, const char **,int ) );
  132. VLC_EXPORT( int,  playlist_Clear, ( playlist_t * ) );
  133. VLC_EXPORT( int,  playlist_Delete, ( playlist_t *, int ) );
  134. VLC_EXPORT( int,  playlist_Disable, ( playlist_t *, int ) );
  135. VLC_EXPORT( int,  playlist_Enable, ( playlist_t *, int ) );
  136. VLC_EXPORT( int,  playlist_DisableGroup, ( playlist_t *, int ) );
  137. VLC_EXPORT( int,  playlist_EnableGroup, ( playlist_t *, int ) );
  138. /* Basic item information accessors */
  139. VLC_EXPORT( int, playlist_ItemSetGroup, (playlist_item_t *, int ) );
  140. VLC_EXPORT( int, playlist_ItemSetName, (playlist_item_t *,  char * ) );
  141. VLC_EXPORT( int, playlist_ItemSetDuration, (playlist_item_t *, mtime_t ) );
  142. VLC_EXPORT( int, playlist_SetGroup, (playlist_t * , int , int ) );
  143. VLC_EXPORT( int, playlist_SetName, (playlist_t *, int ,  char * ) );
  144. VLC_EXPORT( int, playlist_SetDuration, (playlist_t *, int , mtime_t ) );
  145. /* Item search functions */
  146. VLC_EXPORT( int, playlist_GetPositionById, (playlist_t *, int) );
  147. VLC_EXPORT( playlist_item_t *, playlist_ItemGetById, (playlist_t *, int) );
  148. VLC_EXPORT( playlist_item_t *, playlist_ItemGetByPos, (playlist_t *, int) );
  149. /* Group management functions */
  150. VLC_EXPORT( playlist_group_t *, playlist_CreateGroup, (playlist_t *, char* ) );
  151. VLC_EXPORT( int, playlist_DeleteGroup, (playlist_t *, int ) );
  152. VLC_EXPORT( char *, playlist_FindGroup, (playlist_t *, int ) );
  153. VLC_EXPORT( int, playlist_GroupToId, (playlist_t *, char * ) );
  154. /* Info functions */
  155. VLC_EXPORT( char * , playlist_GetInfo, ( playlist_t * , int, const char *, const char *) );
  156. VLC_EXPORT( char * , playlist_ItemGetInfo, ( playlist_item_t * , const char *, const char *) );
  157. VLC_EXPORT( info_category_t*, playlist_ItemGetCategory, ( playlist_item_t *, const char *) );
  158. VLC_EXPORT( info_category_t*, playlist_ItemCreateCategory, ( playlist_item_t *, const char *) );
  159. VLC_EXPORT( int, playlist_AddInfo, (playlist_t *, int, const char * , const char *, const char *, ...) );
  160. VLC_EXPORT( int, playlist_ItemAddInfo, (playlist_item_t *, const char * , const char *, const char *, ...) );
  161. /* Option functions */
  162. VLC_EXPORT( int, playlist_ItemAddOption, (playlist_item_t *, const char *) );
  163. /* Playlist sorting */
  164. #define playlist_SortID(p, i) playlist_Sort( p, SORT_ID, i)
  165. #define playlist_SortTitle(p, i) playlist_Sort( p, SORT_TITLE, i)
  166. #define playlist_SortAuthor(p, i) playlist_Sort( p, SORT_AUTHOR, i)
  167. #define playlist_SortGroup(p, i) playlist_Sort( p, SORT_GROUP, i)
  168. VLC_EXPORT( int,  playlist_Sort, ( playlist_t *, int, int) );
  169. VLC_EXPORT( int,  playlist_Move, ( playlist_t *, int, int ) );
  170. /* Load/Save */
  171. VLC_EXPORT( int,  playlist_Import, ( playlist_t *, const char * ) );
  172. VLC_EXPORT( int,  playlist_Export, ( playlist_t *, const char *, const char * ) );
  173. /**
  174.  *  tell if a playlist is currently playing.
  175.  *  param p_playlist the playlist to check
  176.  *  return true if playlist is playing, false otherwise
  177.  */
  178. static inline vlc_bool_t playlist_IsPlaying( playlist_t * p_playlist )
  179. {
  180.     vlc_bool_t b_playing;
  181.     vlc_mutex_lock( &p_playlist->object_lock );
  182.     b_playing = p_playlist->i_status == PLAYLIST_RUNNING;
  183.     vlc_mutex_unlock( &p_playlist->object_lock );
  184.     return( b_playing );
  185. }
  186. /**
  187.  *  tell if a playlist is currently empty
  188.  *  param p_playlist the playlist to check
  189.  *  return true if the playlist is empty, false otherwise
  190.  */
  191. static inline vlc_bool_t playlist_IsEmpty( playlist_t * p_playlist )
  192. {
  193.     vlc_bool_t b_empty;
  194.     vlc_mutex_lock( &p_playlist->object_lock );
  195.     b_empty = p_playlist->i_size == 0;
  196.     vlc_mutex_unlock( &p_playlist->object_lock );
  197.     return( b_empty );
  198. }
  199. /**
  200.  * @}
  201.  */