QVisu
Qt-based visualization for smart homes
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
vlc_playlist.h
Go to the documentation of this file.
1 /*****************************************************************************
2  * vlc_playlist.h : Playlist functions
3  *****************************************************************************
4  * Copyright (C) 1999-2004 VLC authors and VideoLAN
5  * $Id: 10108cb2842b00126466353057cb8975dd825817 $
6  *
7  * Authors: Samuel Hocevar <sam@zoy.org>
8  *
9  * This program is free software; you can redistribute it and/or modify it
10  * under the terms of the GNU Lesser General Public License as published by
11  * the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
18  *
19  * You should have received a copy of the GNU Lesser General Public License
20  * along with this program; if not, write to the Free Software Foundation,
21  * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
22  *****************************************************************************/
23 
24 #ifndef VLC_PLAYLIST_H_
25 #define VLC_PLAYLIST_H_
26 
27 # ifdef __cplusplus
28 extern "C" {
29 # endif
30 
31 #include <vlc_input.h>
32 #include <vlc_events.h>
33 
34 TYPEDEF_ARRAY(playlist_item_t*, playlist_item_array_t)
35 
36 
124 typedef struct playlist_export_t
125 {
126  VLC_COMMON_MEMBERS
127  const char *psz_filename;
128  FILE *p_file;
129  playlist_item_t *p_root;
131 
134 {
141  int i_id;
142  uint8_t i_flags;
145 };
146 
147 typedef enum {
150  PLAYLIST_DBL_FLAG = 0x0004,
151  PLAYLIST_RO_FLAG = 0x0008,
156 
158 typedef enum
159 { PLAYLIST_STOPPED,PLAYLIST_RUNNING,PLAYLIST_PAUSED } playlist_status_t;
160 
163 {
164  VLC_COMMON_MEMBERS
165 
166  playlist_item_array_t items;
167  playlist_item_array_t all_items;
169  playlist_item_array_t current;
172  /* Predefined items */
173  playlist_item_t * p_root;
174  playlist_item_t * p_playing;
175  playlist_item_t * p_media_library;
176 
177  //Phony ones, point to those above;
180  playlist_item_t * p_local_category;
184 };
185 
188 {
189  int i_node;
190  int i_item;
191 };
192 
193 /* A bit of macro magic to generate an enum out of the following list,
194  * and later, to generate a list of static functions out of the same list.
195  * There is also SORT_RANDOM, which is always last and handled specially.
196  */
197 #define VLC_DEFINE_SORT_FUNCTIONS \
198  DEF( SORT_ID )\
199  DEF( SORT_TITLE )\
200  DEF( SORT_TITLE_NODES_FIRST )\
201  DEF( SORT_ARTIST )\
202  DEF( SORT_GENRE )\
203  DEF( SORT_DURATION )\
204  DEF( SORT_TITLE_NUMERIC )\
205  DEF( SORT_ALBUM )\
206  DEF( SORT_TRACK_NUMBER )\
207  DEF( SORT_DESCRIPTION )\
208  DEF( SORT_RATING )\
209  DEF( SORT_URI )
210 
211 #define DEF( s ) s,
212 enum
213 {
214  VLC_DEFINE_SORT_FUNCTIONS
215  SORT_RANDOM,
216  NUM_SORT_FNS=SORT_RANDOM
217 };
218 #undef DEF
219 #ifndef VLC_INTERNAL_PLAYLIST_SORT_FUNCTIONS
220 #undef VLC_DEFINE_SORT_FUNCTIONS
221 #endif
222 
223 enum
224 {
225  ORDER_NORMAL = 0,
226  ORDER_REVERSE = 1,
227 };
228 
229 /* Used by playlist_Import */
230 #define PLAYLIST_INSERT 0x0001
231 #define PLAYLIST_APPEND 0x0002
232 #define PLAYLIST_GO 0x0004
233 #define PLAYLIST_PREPARSE 0x0008
234 #define PLAYLIST_SPREPARSE 0x0010
235 #define PLAYLIST_NO_REBUILD 0x0020
236 
237 #define PLAYLIST_END -666
238 
239 enum pl_locked_state
240 {
241  pl_Locked = true,
242  pl_Unlocked = false
243 };
244 
245 /*****************************************************************************
246  * Prototypes
247  *****************************************************************************/
248 
249 /* Helpers */
250 #define PL_LOCK playlist_Lock( p_playlist )
251 #define PL_UNLOCK playlist_Unlock( p_playlist )
252 #define PL_ASSERT_LOCKED playlist_AssertLocked( p_playlist )
253 
254 VLC_API playlist_t * pl_Get( vlc_object_t * );
255 #define pl_Get( a ) pl_Get( VLC_OBJECT(a) )
256 
257 /* Playlist control */
258 #define playlist_Play(p) playlist_Control(p,PLAYLIST_PLAY, pl_Unlocked )
259 #define playlist_Pause(p) playlist_Control(p,PLAYLIST_PAUSE, pl_Unlocked )
260 #define playlist_Stop(p) playlist_Control(p,PLAYLIST_STOP, pl_Unlocked )
261 #define playlist_Next(p) playlist_Control(p,PLAYLIST_SKIP, pl_Unlocked, 1)
262 #define playlist_Prev(p) playlist_Control(p,PLAYLIST_SKIP, pl_Unlocked, -1)
263 #define playlist_Skip(p,i) playlist_Control(p,PLAYLIST_SKIP, pl_Unlocked, (i) )
264 
265 VLC_API void playlist_Lock( playlist_t * );
266 VLC_API void playlist_Unlock( playlist_t * );
267 VLC_API void playlist_AssertLocked( playlist_t * );
268 VLC_API void playlist_Deactivate( playlist_t * );
269 
280 VLC_API int playlist_Control( playlist_t *p_playlist, int i_query, bool b_locked, ... );
281 
284 VLC_API input_thread_t * playlist_CurrentInput( playlist_t *p_playlist ) VLC_USED;
285 
289 
293 VLC_API void playlist_Clear( playlist_t *, bool );
294 
297 
300 
301 /* Playlist sorting */
302 VLC_API int playlist_TreeMove( playlist_t *, playlist_item_t *, playlist_item_t *, int );
303 VLC_API int playlist_TreeMoveMany( playlist_t *, int, playlist_item_t **, playlist_item_t *, int );
304 VLC_API int playlist_RecursiveNodeSort( playlist_t *, playlist_item_t *,int, int );
305 
306 VLC_API playlist_item_t * playlist_CurrentPlayingItem( playlist_t * ) VLC_USED;
307 VLC_API int playlist_Status( playlist_t * );
308 
317 VLC_API int playlist_Export( playlist_t *p_playlist, const char *psz_name, playlist_item_t *p_export_root, const char *psz_type );
318 
322 VLC_API int playlist_Import( playlist_t *p_playlist, const char *psz_file );
323 
324 /********************** Services discovery ***********************/
325 
327 VLC_API int playlist_ServicesDiscoveryAdd(playlist_t *, const char *);
329 VLC_API int playlist_ServicesDiscoveryRemove(playlist_t *, const char *);
331 VLC_API bool playlist_IsServicesDiscoveryLoaded( playlist_t *,const char *) VLC_DEPRECATED;
333 VLC_API int playlist_ServicesDiscoveryControl( playlist_t *, const char *, int, ... );
334 
335 
336 
337 /********************************************************
338  * Item management
339  ********************************************************/
340 
341 /*************************** Item deletion **************************/
342 VLC_API int playlist_DeleteFromInput( playlist_t *, input_item_t *, bool );
343 
344 /******************** Item addition ********************/
345 VLC_API int playlist_Add( playlist_t *, const char *, const char *, int, int, bool, bool );
346 VLC_API int playlist_AddExt( playlist_t *, const char *, const char *, int, int, mtime_t, int, const char *const *, unsigned, bool, bool );
347 VLC_API int playlist_AddInput( playlist_t *, input_item_t *, int, int, bool, bool );
348 VLC_API playlist_item_t * playlist_NodeAddInput( playlist_t *, input_item_t *, playlist_item_t *, int, int, bool );
349 VLC_API int playlist_NodeAddCopy( playlist_t *, playlist_item_t *, playlist_item_t *, int );
350 
351 /********************************** Item search *************************/
352 VLC_API playlist_item_t * playlist_ItemGetById(playlist_t *, int ) VLC_USED;
353 VLC_API playlist_item_t * playlist_ItemGetByInput(playlist_t *,input_item_t * ) VLC_USED;
354 
355 VLC_API int playlist_LiveSearchUpdate(playlist_t *, playlist_item_t *, const char *, bool );
356 
357 /********************************************************
358  * Tree management
359  ********************************************************/
360 /* Node management */
361 VLC_API playlist_item_t * playlist_NodeCreate( playlist_t *, const char *, playlist_item_t * p_parent, int i_pos, int i_flags, input_item_t * );
362 VLC_API int playlist_NodeAppend(playlist_t *,playlist_item_t*,playlist_item_t *);
363 VLC_API int playlist_NodeInsert(playlist_t *,playlist_item_t*,playlist_item_t *, int);
364 VLC_API int playlist_NodeRemoveItem(playlist_t *,playlist_item_t*,playlist_item_t *);
365 VLC_API playlist_item_t * playlist_ChildSearchName(playlist_item_t*, const char* ) VLC_USED;
366 VLC_API int playlist_NodeDelete( playlist_t *, playlist_item_t *, bool , bool );
367 
368 VLC_API playlist_item_t * playlist_GetNextLeaf( playlist_t *p_playlist, playlist_item_t *p_root, playlist_item_t *p_item, bool b_ena, bool b_unplayed ) VLC_USED;
369 VLC_API playlist_item_t * playlist_GetPrevLeaf( playlist_t *p_playlist, playlist_item_t *p_root, playlist_item_t *p_item, bool b_ena, bool b_unplayed ) VLC_USED;
370 
371 /**************************
372  * Audio output management
373  **************************/
374 
375 VLC_API audio_output_t *playlist_GetAout( playlist_t * );
376 
377 #define AOUT_VOLUME_DEFAULT 256
378 #define AOUT_VOLUME_MAX 512
379 
380 VLC_API float playlist_VolumeGet( playlist_t * );
381 VLC_API int playlist_VolumeSet( playlist_t *, float );
382 VLC_API int playlist_VolumeUp( playlist_t *, int, float * );
383 #define playlist_VolumeDown(a, b, c) playlist_VolumeUp(a, -(b), c)
384 VLC_API int playlist_MuteSet( playlist_t *, bool );
385 VLC_API int playlist_MuteGet( playlist_t * );
386 
387 static inline int playlist_MuteToggle( playlist_t *pl )
388 {
389  int val = playlist_MuteGet( pl );
390  if (val >= 0)
391  val = playlist_MuteSet( pl, !val );
392  return val;
393 }
394 
395 VLC_API void playlist_EnableAudioFilter( playlist_t *, const char *, bool );
396 
397 /***********************************************************************
398  * Inline functions
399  ***********************************************************************/
401 #define pl_CurrentInput(a) __pl_CurrentInput( VLC_OBJECT(a) )
402 static inline input_thread_t * __pl_CurrentInput( vlc_object_t * p_this )
403 {
404  return playlist_CurrentInput( pl_Get( p_this ) );
405 }
406 
408 static inline bool playlist_IsEmpty( playlist_t *p_playlist )
409 {
410  PL_ASSERT_LOCKED;
411  return p_playlist->items.i_size == 0;
412 }
413 
415 static inline int playlist_CurrentSize( playlist_t *p_playlist )
416 {
417  PL_ASSERT_LOCKED;
418  return p_playlist->current.i_size;
419 }
420 
422 # ifdef __cplusplus
423 }
424 # endif
425 
426 #endif
Definition: vlc_playlist.h:148
Definition: vlc_playlist.h:152
Definition: vlc_input_item.h:55
VLC_API int playlist_ServicesDiscoveryAdd(playlist_t *, const char *)
uint8_t i_flags
Definition: vlc_playlist.h:142
VLC_API int playlist_Import(playlist_t *p_playlist, const char *psz_file)
int i_children
Definition: vlc_playlist.h:139
Definition: vlc_playlist.h:154
playlist_item_t * p_ml_onelevel
Definition: vlc_playlist.h:183
VLC_API int playlist_PreparseEnqueue(playlist_t *, input_item_t *)
VLC_API int playlist_AskForArtEnqueue(playlist_t *, input_item_t *)
Definition: vlc_playlist.h:124
input_item_t * p_input
Definition: vlc_playlist.h:135
Definition: vlc_playlist.h:151
VLC_COMMON_MEMBERS playlist_item_array_t items
Definition: vlc_playlist.h:166
VLC_API int playlist_Control(playlist_t *p_playlist, int i_query, bool b_locked,...)
playlist_item_array_t all_items
Definition: vlc_playlist.h:167
Definition: vlc_playlist.h:149
playlist_item_t * p_parent
Definition: vlc_playlist.h:138
playlist_item_t * p_local_onelevel
Definition: vlc_playlist.h:182
Definition: vlc_playlist.h:153
VLC_API void playlist_Clear(playlist_t *, bool)
Definition: vlc_playlist.h:133
VLC_API input_thread_t * playlist_CurrentInput(playlist_t *p_playlist) VLC_USED
playlist_t * p_playlist
Definition: vlc_playlist.h:144
int i_id
Definition: vlc_playlist.h:141
playlist_item_array_t current
Definition: vlc_playlist.h:169
VLC_API bool playlist_IsServicesDiscoveryLoaded(playlist_t *, const char *) VLC_DEPRECATED
int i_node
Definition: vlc_playlist.h:189
playlist_item_flags_e
Definition: vlc_playlist.h:147
playlist_item_t * p_root_category
Definition: vlc_playlist.h:178
VLC_API mtime_t playlist_GetNodeDuration(playlist_item_t *)
Definition: vlc_aout.h:101
VLC_API int playlist_Export(playlist_t *p_playlist, const char *psz_name, playlist_item_t *p_export_root, const char *psz_type)
Definition: vlc_input.h:227
int i_item
Definition: vlc_playlist.h:190
playlist_item_t * p_root_onelevel
Definition: vlc_playlist.h:179
int64_t mtime_t
Definition: vlc_common.h:153
Definition: vlc_playlist.h:187
struct playlist_export_t playlist_export_t
Definition: vlc_playlist.h:150
VLC_API int playlist_ServicesDiscoveryControl(playlist_t *, const char *, int,...)
int i_current_index
Definition: vlc_playlist.h:170
playlist_status_t
Definition: vlc_playlist.h:158
Definition: vlc_objects.h:42
VLC_API int playlist_ServicesDiscoveryRemove(playlist_t *, const char *)
playlist_item_t ** pp_children
Definition: vlc_playlist.h:137
Definition: vlc_playlist.h:162
playlist_item_t * p_ml_category
Definition: vlc_playlist.h:181