VLC  4.0.0-dev
vlc_media_library.h
Go to the documentation of this file.
1 /*****************************************************************************
2  * vlc_media_library.h: SQL-based media library
3  *****************************************************************************
4  * Copyright (C) 2008-2010 the VideoLAN Team and AUTHORS
5  *
6  * Authors: Antoine Lejeune <phytos@videolan.org>
7  * Jean-Philippe André <jpeg@videolan.org>
8  * Rémi Duraffort <ivoire@videolan.org>
9  * Adrien Maglo <magsoft@videolan.org>
10  * Srikanth Raju <srikiraju at gmail dot com>
11  *
12  * This program is free software; you can redistribute it and/or modify it
13  * under the terms of the GNU Lesser General Public License as published by
14  * the Free Software Foundation; either version 2.1 of the License, or
15  * (at your option) any later version.
16  *
17  * This program is distributed in the hope that it will be useful,
18  * but WITHOUT ANY WARRANTY; without even the implied warranty of
19  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20  * GNU Lesser General Public License for more details.
21  *
22  * You should have received a copy of the GNU Lesser General Public License
23  * along with this program; if not, write to the Free Software Foundation,
24  * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
25  *****************************************************************************/
26 
27 #ifndef VLC_MEDIA_LIBRARY_H
28 # define VLC_MEDIA_LIBRARY_H
29 
30 #include <assert.h>
31 #include <vlc_common.h>
32 
33 # ifdef __cplusplus
34 extern "C" {
35 # endif
36 
37 typedef enum vlc_ml_media_type_t
38 {
43 
44 typedef enum vlc_ml_media_subtype_t
45 {
51 
52 typedef enum vlc_ml_file_type_t
53 {
61 
62 typedef enum vlc_ml_track_type_t
63 {
68 
69 typedef enum vlc_ml_thumbnail_size_t
70 {
73 
76 
77 typedef enum vlc_ml_history_type_t
78 {
82 
83 typedef struct vlc_ml_thumbnail_t
84 {
85  char* psz_mrl;
86  /**
87  * True if a thumbnail is available, or if thumbnail generation was
88  * attempted but failed
89  */
90  bool b_generated;
92 
93 typedef struct vlc_ml_movie_t
94 {
95  char* psz_summary;
96  char* psz_imdb_id;
98 
99 typedef struct vlc_ml_show_episode_t
100 {
101  char* psz_summary;
102  char* psz_tvdb_id;
103  uint32_t i_episode_nb;
104  uint32_t i_season_number;
106 
107 typedef struct vlc_ml_show_t
108 {
109  int64_t i_id;
110  char* psz_name;
111  char* psz_summary;
112  char* psz_artwork_mrl;
113  char* psz_tvdb_id;
114  unsigned int i_release_year;
115  uint32_t i_nb_episodes;
116  uint32_t i_nb_seasons;
118 
119 typedef struct vlc_ml_album_track_t
120 {
121  int64_t i_artist_id;
122  int64_t i_album_id;
123  int64_t i_genre_id;
125  int i_track_nb;
126  int i_disc_nb;
128 
129 typedef struct vlc_ml_label_t
130 {
131  int64_t i_id;
132  char* psz_name;
134 
135 typedef struct vlc_ml_label_list_t
136 {
137  size_t i_nb_items;
138  vlc_ml_label_t p_items[];
140 
141 typedef struct vlc_ml_file_t
142 {
143  char* psz_mrl;
145  bool b_external;
146  bool b_removable;
147  bool b_present;
149 
150 typedef struct vlc_ml_file_list_t
151 {
152  size_t i_nb_items;
153  vlc_ml_file_t p_items[];
155 
156 typedef struct vlc_ml_media_track_t
157 {
158  char* psz_codec;
159  char* psz_language;
160  char* psz_description;
162  uint32_t i_bitrate;
163  union
164  {
165  struct
166  {
167  // Audio
168  uint32_t i_nbChannels;
169  uint32_t i_sampleRate;
170  } a;
171  struct
172  {
173  // Video
174  uint32_t i_height;
175  uint32_t i_width;
176  uint32_t i_sarNum;
177  uint32_t i_sarDen;
178  uint32_t i_fpsNum;
179  uint32_t i_fpsDen;
180  } v;
181  };
183 
184 typedef struct vlc_ml_media_track_list_t
185 {
186  size_t i_nb_items;
189 
190 typedef struct vlc_ml_media_t
191 {
192  int64_t i_id;
197  vlc_ml_file_list_t* p_files;
200  int32_t i_year;
201  /* Duration in milliseconds */
202  int64_t i_duration;
203  uint32_t i_playcount;
204  time_t i_last_played_date;
205  char* psz_title;
209  bool b_is_favorite;
211  union
212  {
213  vlc_ml_show_episode_t show_episode;
215  vlc_ml_album_track_t album_track;
216  };
218 
219 typedef struct vlc_ml_playlist_t
220 {
221  int64_t i_id;
222  char* psz_name;
223  uint32_t i_creation_date;
224  char* psz_artwork_mrl;
226 
227 typedef struct vlc_ml_artist_t
228 {
229  int64_t i_id;
230  char* psz_name;
231  char* psz_shortbio;
233  char* psz_mb_id;
235  unsigned int i_nb_album;
236  unsigned int i_nb_tracks;
238 
239 typedef struct vlc_ml_artist_list_t
240 {
241  size_t i_nb_items;
242  vlc_ml_artist_t p_items[];
244 
245 typedef struct vlc_ml_album_t {
246  int64_t i_id;
247  char* psz_title;
248  char* psz_summary;
250  char* psz_artist;
251  int64_t i_artist_id;
253  size_t i_nb_tracks;
254  unsigned int i_duration;
255  unsigned int i_year;
257 
258 typedef struct vlc_ml_genre_t
259 {
260  int64_t i_id;
261  char* psz_name;
262  size_t i_nb_tracks;
264 
265 typedef struct vlc_ml_media_list_t
266 {
267  size_t i_nb_items;
268  vlc_ml_media_t p_items[];
270 
271 typedef struct vlc_ml_album_list_t
272 {
273  size_t i_nb_items;
274  vlc_ml_album_t p_items[];
276 
277 typedef struct vlc_ml_show_list_t
278 {
279  size_t i_nb_items;
280  vlc_ml_show_t p_items[];
282 
283 typedef struct vlc_ml_genre_list_t
284 {
285  size_t i_nb_items;
286  vlc_ml_genre_t p_items[];
288 
289 typedef struct vlc_ml_playlist_list_t
290 {
291  size_t i_nb_items;
292  vlc_ml_playlist_t p_items[];
294 
295 typedef struct vlc_ml_entry_point_t
296 {
297  char* psz_mrl; /**< This entrypoint's MRL. Will be NULL if b_present is false */
298  bool b_present; /**< The presence state for this entrypoint. */
299  bool b_banned; /**< Will be true if the user required this entrypoint to be excluded */
301 
302 typedef struct vlc_ml_entry_point_list_t
303 {
304  size_t i_nb_items;
307 
308 /* Opaque medialibrary pointer, to be used by any non-medialibrary module */
310 /* "Private" medialibrary pointer, to be used by the core & medialibrary modules */
312 /* Opaque event callback type */
315 typedef enum vlc_ml_sorting_criteria_t
316 {
317  /*
318  * Default depends on the entity type:
319  * - By track number (and disc number) for album tracks
320  * - Alphabetical order for others
321  */
335 
338 {
339  const char* psz_pattern;
340  uint32_t i_nbResults;
341  uint32_t i_offset;
343  bool b_desc;
344 };
345 
347 {
348  VLC_ML_GET_MEDIA, /**< arg1: Media ID; ret: vlc_ml_media_t* */
349  VLC_ML_GET_MEDIA_BY_MRL, /**< arg1: Media MRL; ret: vlc_ml_media_t* */
350  VLC_ML_GET_INPUT_ITEM, /**< arg1: Media ID; ret: input_item_t* */
351  VLC_ML_GET_INPUT_ITEM_BY_MRL,/**< arg1: Media MRL; ret: input_item_t* */
352  VLC_ML_GET_ALBUM, /**< arg1: Album ID; ret: vlc_ml_album_t* */
353  VLC_ML_GET_ARTIST, /**< arg1: Artist ID; ret: vlc_ml_artist_t* */
354  VLC_ML_GET_GENRE, /**< arg1: Genre ID; ret: vlc_ml_genre_t* */
355  VLC_ML_GET_SHOW, /**< arg1: Show ID; ret: vlc_ml_show_t* */
356  VLC_ML_GET_PLAYLIST, /**< arg1: Playlist ID; ret: vlc_ml_playlist_t* */
357 };
358 
360 {
361  /* General listing: */
362 
363  VLC_ML_LIST_VIDEOS, /**< arg1 (out): vlc_ml_media_list_t** */
364  VLC_ML_COUNT_VIDEOS, /**< arg1 (out): size_t* */
365  VLC_ML_LIST_AUDIOS, /**< arg1 (out): vlc_ml_media_list_t** */
366  VLC_ML_COUNT_AUDIOS, /**< arg1 (out): size_t* */
367  VLC_ML_LIST_ALBUMS, /**< arg1 (out): vlc_ml_album_list_t** */
368  VLC_ML_COUNT_ALBUMS, /**< arg1 (out): size_t* */
369  VLC_ML_LIST_GENRES, /**< arg1 (out): vlc_ml_genre_list_t** */
370  VLC_ML_COUNT_GENRES, /**< arg1 (out): size_t* */
371  VLC_ML_LIST_ARTISTS, /**< arg1 bool: includeAll; arg2 (out): vlc_ml_genre_list_t** */
372  VLC_ML_COUNT_ARTISTS, /**< arg1 bool: includeAll; arg2 (out): size_t* */
373  VLC_ML_LIST_SHOWS, /**< arg1 (out): vlc_ml_show_list_t** */
374  VLC_ML_COUNT_SHOWS, /**< arg1 (out): size_t* */
375  VLC_ML_LIST_PLAYLISTS, /**< arg1 (out): vlc_ml_playlist_list_t** */
376  VLC_ML_COUNT_PLAYLISTS, /**< arg1 (out): size_t* */
377  VLC_ML_LIST_HISTORY, /**< arg1 (out): vlc_ml_media_list_t** */
378  VLC_ML_LIST_STREAM_HISTORY, /**< arg1 (out): vlc_ml_media_list_t** */
380  /* Album specific listings */
381  VLC_ML_LIST_ALBUM_TRACKS, /**< arg1: The album id. arg2 (out): vlc_ml_media_list_t** */
382  VLC_ML_COUNT_ALBUM_TRACKS, /**< arg1: The album id. arg2 (out): size_t* */
383  VLC_ML_LIST_ALBUM_ARTISTS, /**< arg1: The album id. arg2 (out): vlc_ml_album_list_t** */
384  VLC_ML_COUNT_ALBUM_ARTISTS, /**< arg1: The album id. arg2 (out): size_t* */
386  /* Artist specific listings */
387  VLC_ML_LIST_ARTIST_ALBUMS, /**< arg1: The artist id. arg2(out): vlc_ml_album_list_t** */
388  VLC_ML_COUNT_ARTIST_ALBUMS, /**< arg1: The artist id. arg2(out): size_t* */
389  VLC_ML_LIST_ARTIST_TRACKS, /**< arg1: The artist id. arg2(out): vlc_ml_media_list_t** */
390  VLC_ML_COUNT_ARTIST_TRACKS, /**< arg1: The artist id. arg2(out): size_t* */
392  /* Genre specific listings */
393  VLC_ML_LIST_GENRE_ARTISTS, /**< arg1: genre id; arg2 (out): vlc_ml_artist_list_t** */
394  VLC_ML_COUNT_GENRE_ARTISTS, /**< arg1: genre id; arg2 (out): size_t* */
395  VLC_ML_LIST_GENRE_TRACKS, /**< arg1: genre id; arg2 (out): vlc_ml_media_list_t** */
396  VLC_ML_COUNT_GENRE_TRACKS, /**< arg1: genre id; arg2 (out): size_t* */
397  VLC_ML_LIST_GENRE_ALBUMS, /**< arg1: genre id; arg2 (out): vlc_ml_album_list_t** */
398  VLC_ML_COUNT_GENRE_ALBUMS, /**< arg1: genre id; arg2 (out): size_t* */
400  /* Show specific listings */
401  VLC_ML_LIST_SHOW_EPISODES, /**< arg1: show id; arg2(out): vlc_ml_media_list_t** */
402  VLC_ML_COUNT_SHOW_EPISODES, /**< arg1: show id; arg2(out): size_t* */
404  /* Media specific listings */
405  VLC_ML_LIST_MEDIA_LABELS, /**< arg1: media id; arg2 (out): vlc_ml_label_list_t** */
406  VLC_ML_COUNT_MEDIA_LABELS, /**< arg1: media id; arg2 (out): size_t* */
408  /* Playlist specific listings */
409  VLC_ML_LIST_PLAYLIST_MEDIA, /**< arg1: playlist id; arg2 (out): vlc_ml_media_list_t** */
410  VLC_ML_COUNT_PLAYLIST_MEDIA, /**< arg1: playlist id; arg2 (out): size_t* */
412  /* Children entities listing */
413  VLC_ML_LIST_MEDIA_OF, /**< arg1: parent entity type; arg2: parent entity id; arg3(out): ml_media_list_t** */
414  VLC_ML_COUNT_MEDIA_OF, /**< arg1: parent entity type; arg2: parent entity id; arg3(out): size_t* */
415  VLC_ML_LIST_ARTISTS_OF, /**< arg1: parent entity type; arg2: parent entity id; arg3(out): ml_artist_list_t** */
416  VLC_ML_COUNT_ARTISTS_OF, /**< arg1: parent entity type; arg2: parent entity id; arg3(out): size_t* */
417  VLC_ML_LIST_ALBUMS_OF, /**< arg1: parent entity type; arg2: parent entity id; arg3(out): ml_album_list_t** */
418  VLC_ML_COUNT_ALBUMS_OF, /**< arg1: parent entity type; arg2: parent entity id; arg3(out): size_t* */
419 };
420 
422 {
429 };
430 
431 enum vlc_ml_control
432 {
433  /* Adds a folder to discover through the medialibrary */
434  VLC_ML_ADD_FOLDER, /**< arg1: mrl (const char*) res: can't fail */
435  VLC_ML_REMOVE_FOLDER, /**< arg1: mrl (const char*) res: can't fail */
436  VLC_ML_BAN_FOLDER, /**< arg1: mrl (const char*) res: can't fail */
437  VLC_ML_UNBAN_FOLDER, /**< arg1: mrl (const char*) res: can't fail */
438  VLC_ML_LIST_FOLDERS, /**< arg1: entrypoints (vlc_ml_entry_point_list_t**); res: can fail */
439  VLC_ML_IS_INDEXED, /**< arg1: mrl (const char*) arg2 (out): bool*; res: can fail */
440  /**
441  * Reload a specific folder, or all.
442  * arg1: mrl (const char*), NULL to reload all folders
443  * res: can't fail
444  */
447  /* Pause/resume background operations, such as media discovery & media analysis */
448  VLC_ML_PAUSE_BACKGROUND, /**< no args; can't fail */
449  VLC_ML_RESUME_BACKGROUND, /**< no args; can't fail */
451  /* Misc operations */
452  VLC_ML_CLEAR_HISTORY, /**< no args; can't fail */
454  /* Create media */
455  VLC_ML_NEW_EXTERNAL_MEDIA, /**< arg1: const char*; arg2(out): vlc_ml_media_t** */
456  VLC_ML_NEW_STREAM, /**< arg1: const char*; arg2(out): vlc_ml_media_t** */
458  /* Media management */
459  VLC_ML_MEDIA_INCREASE_PLAY_COUNT, /**< arg1: media id; can fail */
460  VLC_ML_MEDIA_GET_MEDIA_PLAYBACK_STATE, /**< arg1: media id; arg2: vlc_ml_playback_state; arg3: char**; */
461  VLC_ML_MEDIA_SET_MEDIA_PLAYBACK_STATE, /**< arg1: media id; arg2: vlc_ml_playback_state; arg3: const char*; */
462  VLC_ML_MEDIA_GET_ALL_MEDIA_PLAYBACK_STATES, /**< arg1: media id; arg2(out): vlc_ml_playback_states_all* */
463  VLC_ML_MEDIA_SET_ALL_MEDIA_PLAYBACK_STATES, /**< arg1: media id; arg2: const vlc_ml_playback_states_all* */
464  VLC_ML_MEDIA_SET_THUMBNAIL, /**< arg1: media id; arg2: const char*; arg3: vlc_ml_thumbnail_size_t */
465  VLC_ML_MEDIA_GENERATE_THUMBNAIL, /**< arg1: media id; arg2: vlc_ml_thumbnail_size_t; arg3: width; arg4: height; arg5: position */
466  VLC_ML_MEDIA_ADD_EXTERNAL_MRL, /**< arg1: media id; arg2: const char*; arg3: type(vlc_ml_file_type_t) */
467  VLC_ML_MEDIA_SET_TYPE, /**< arg1: media id; arg2: vlc_ml_media_type_t */
468 };
469 
470 /**
471  * User playback settings.
472  * All values/units are up to the caller and are not interpreted by the media
473  * library.
474  * All values are stored and returned as strings.
475  * When calling vlc_medialibrary_t::pf_control with vlc_ml_MEDIA_GET_MEDIA_PLAYBACK_STATE,
476  * the value will be returned stored in the provided char**. If the state was
477  * not set yet, NULL will be returned.
478  * When setting a state, NULL can be provided as a value to unset it.
479  */
481 {
501 };
502 
503 typedef struct vlc_ml_playback_states_all
504 {
505  float progress;
506  float rate;
507  float zoom;
508  int current_title;
509  char* current_video_track;
510  char* current_audio_track;
511  char *current_subtitle_track;
512  char* aspect_ratio;
513  char* crop;
514  char* deinterlace;
515  char* video_filter;
517 
519 {
520  /**
521  * Entity modification callbacks. The affected entity will be passed:
522  * - As a vlc_ml_<type>_t, depending on the type of the modified/inserted
523  * entity, in vlc_ml_event_t::modification::p_<type>
524  * for ADDED and UPDATED variants.
525  * - as an id, in vlc_ml_event_t::deletion::i_entity_id
526  * When _DELETED callbacks get invoked, the entity will already have been
527  * deleted from the database, and cannot be retrieved anymore
528  */
544  /**
545  * A discovery started.
546  * For each VLC_ML_EVENT_DISCOVERY_STARTED event, there will be
547  * 1 VLC_ML_EVENT_DISCOVERY_COMPLETED event, and N
548  * VLC_ML_EVENT_DISCOVERY_PROGRESS events.
549  * The entry point being discovered is stored in
550  * vlc_ml_event_t::discovery_started::psz_entry_point.
551  */
553  /**
554  * Sent when a discovery or reload operation starts analyzing a new folder.
555  * The discovered entry point is stored in
556  * vlc_ml_event_t::discovery_progress::psz_entry_point.
557  */
559  /**
560  * Sent when an entry point discovery is completed.
561  * The entry point that was being discovered is stored in
562  * vlc_ml_event_t::discovery_completed::psz_entry_point.
563  * The success or failure state is stored in
564  * vlc_ml_event_t::discovery_completed::b_success
565  */
567  /**
568  * An entry point reload operation started.
569  * For all the entry points being reloaded, N VLC_EVENT_DISCOVERY_PROGRESS
570  * and 1 VLC_EVENT_RELOAD_COMPLETED event will be sent.
571  * The entry point being reloaded is stored in
572  * vlc_ml_event_t::reload_started::psz_entry_point.
573  */
575  /**
576  * Sent when an entry point reload is completed.
577  * The entry point that was being reloaded is stored in
578  * vlc_ml_event_t::reload_completed::psz_entry_point.
579  * The success or failure state is stored in
580  * vlc_ml_event_t::reload_completed::b_success
581  */
583  /**
584  * Sent when a new entry point gets added to the database.
585  * The entry point that was added is stored in
586  * vlc::ml_event_t::entry_point_added::psz_entry_point, and the success or failure
587  * state is stored in vlc_ml_event_t::entry_point_added::b_success
588  * If successful, this event won't be emited again for this entry point.
589  * In case of failure, this event will be fired again if the same entry point
590  * is queued for discovery again.
591  */
593  /**
594  * Sent when an entry point removal request has been processed.
595  * The removed entry point is stored in
596  * vlc_ml_event_t::entry_point_removed::psz_entry_point and the success or failure
597  * state is stored in vlc_ml_event_t::entry_point_removed::b_success
598  */
600  /**
601  * Sent when an entry point ban request has been processed.
602  * The banned entry point is stored in
603  * vlc_ml_event_t::entry_point_banned::psz_entry_point and the operation success
604  * state is stored in vlc_ml_event_t::entry_point_banned::b_success
605  */
607  /**
608  * Sent when an entry point unban request has been processed.
609  * The unbanned entry point is stored in
610  * vlc_ml_event_t::entry_point_unbanned::psz_entry_point and the operation success
611  * state is stored in vlc_ml_event_t::entry_point_unbanned::b_success
612  */
614  /**
615  * Sent when a discoverer or parser threads changes its idle state.
616  * The idle state is stored in vlc_ml_event_t::background_idle_changed.b_idle.
617  * False means at least one background thread is in running, true means
618  * both discoverer & parser threads are paused.
619  */
621  /**
622  * Sent when the parsing progress percentage gets updated.
623  * The percentage is stored as a [0;100] integer, in
624  * vlc_ml_event_t::parsing_progress::i_percent
625  * This value might decrease as more media get discovered, but it will only
626  * increase once all discovery operations are completed.
627  */
629  /**
630  * Sent after a media thumbnail was generated, or if it's generation failed.
631  * The media is stored in vlc_ml_event_t::media_thumbnail_generated::p_media
632  * and the success state is stored in
633  * vlc_ml_event_t::media_thumbnail_generated::b_success
634  */
636  /**
637  * Sent after the history gets changed. It can be either cleaned, or simply
638  * modified because a media was recently played/removed from the history.
639  * The history type (media/network) is stored in
640  * vlc_ml_event_t::history_changed::history_type
641  */
643  /**
644  * Sent when an application requested rescan starts being processed.
645  */
647 };
648 
649 typedef struct vlc_ml_event_t
650 {
651  int i_type;
652  union
653  {
654  struct
655  {
656  const char* psz_entry_point;
657  } discovery_started;
658  struct
659  {
660  const char* psz_entry_point;
661  } discovery_progress;
662  struct
663  {
664  const char* psz_entry_point;
665  bool b_success;
666  } discovery_completed;
667  struct
668  {
669  const char* psz_entry_point;
670  } reload_started;
671  struct
672  {
673  const char* psz_entry_point;
674  bool b_success;
675  } reload_completed;
676  struct
677  {
678  const char* psz_entry_point;
679  bool b_success;
680  } entry_point_added;
681  struct
682  {
683  const char* psz_entry_point;
684  bool b_success;
685  } entry_point_removed;
686  struct
687  {
688  const char* psz_entry_point;
689  bool b_success;
690  } entry_point_banned;
691  struct
692  {
693  const char* psz_entry_point;
694  bool b_success;
695  } entry_point_unbanned;
696  struct
697  {
698  uint8_t i_percent;
699  } parsing_progress;
700  union
701  {
702  const vlc_ml_media_t* p_media;
703  const vlc_ml_artist_t* p_artist;
704  const vlc_ml_album_t* p_album;
705  const vlc_ml_playlist_t* p_playlist;
706  const vlc_ml_genre_t* p_genre;
707  } creation;
708  struct
709  {
710  int64_t i_entity_id;
711  } modification;
712  struct
713  {
714  int64_t i_entity_id;
715  } deletion;
716  struct
717  {
718  bool b_idle;
719  } background_idle_changed;
720  struct
721  {
722  const vlc_ml_media_t* p_media;
724  bool b_success;
725  } media_thumbnail_generated;
726  struct
727  {
728  vlc_ml_history_type_t history_type;
729  } history_changed;
730  };
732 
733 typedef void (*vlc_ml_callback_t)( void* p_data, const vlc_ml_event_t* p_event );
735 typedef struct vlc_medialibrary_callbacks_t
736 {
737  void (*pf_send_event)( vlc_medialibrary_module_t* p_ml, const vlc_ml_event_t* p_event );
739 
741 {
742  struct vlc_object_t obj;
744  module_t *p_module;
746  void* p_sys;
748  int (*pf_control)( struct vlc_medialibrary_module_t* p_ml, int i_query, va_list args );
749  /**
750  * List some entities from the medialibrary.
751  *
752  * \param p_ml The medialibrary module instance.
753  * \param i_query The type search to be performed. \see vlc_ml_list enumeration
754  * \param p_params A pointer to a vlc_ml_query_params_t structure, or NULL for
755  * the default parameters (alphabetical ascending sort, no pagination)
756  *
757  * \return VLC_SUCCESS or an error code
758  *
759  * Refer to the individual list of vlc_ml_list requests for the additional
760  * per-query input/ouput parameters values & types
761  */
762  int (*pf_list)( struct vlc_medialibrary_module_t* p_ml, int i_query,
763  const vlc_ml_query_params_t* p_params, va_list args );
764 
765  /**
766  * Get a specific entity by its id or another unique value
767  *
768  * \return The required entity, or a NULL pointer if couldn't be found.
769  *
770  * Refer to the list of queries for the specific return type
771  */
772  void* (*pf_get)( struct vlc_medialibrary_module_t* p_ml, int i_query, va_list args );
775 };
776 
779 
781 #define vlc_ml_instance_get(x) vlc_ml_instance_get( VLC_OBJECT(x) )
783 VLC_API void* vlc_ml_get( vlc_medialibrary_t* p_ml, int i_query, ... ) VLC_USED;
784 VLC_API int vlc_ml_control( vlc_medialibrary_t* p_ml, int i_query, ... ) VLC_USED;
785 VLC_API int vlc_ml_list( vlc_medialibrary_t* p_ml, int i_query,
786  const vlc_ml_query_params_t* p_params, ... );
787 
788 /**
789  * \brief Registers a medialibrary callback.
790  * \returns A handle to the callback, to be passed to vlc_ml_event_unregister_callback
791  */
794 
795 /**
796  * \brief Unregisters a medialibrary callback
797  * \param p_handle The handled returned by vlc_ml_register_callback
798  */
800  vlc_ml_event_callback_t* p_callback );
801 /**
802  * \brief Unregisters a medialibrary callback from the said callback.
803  * \param p_callback The handle returned by vlc_ml_register_callback
804  *
805  * This must only be called synchronously from the callback function provided to
806  * vlc_ml_event_register_callback
807  * The p_callback handle must be considered invalid when this function returns
808  */
810  vlc_ml_event_callback_t* p_callback );
811 
812 
819 
830 
832 {
833  return (vlc_ml_query_params_t) {
834  .psz_pattern = NULL,
835  .i_nbResults = 0,
836  .i_offset = 0,
837  .i_sort = VLC_ML_SORTING_DEFAULT,
838  .b_desc = false
839  };
840 }
841 
842 static inline int vlc_ml_add_folder( vlc_medialibrary_t* p_ml, const char* psz_folder )
843 {
844  return vlc_ml_control( p_ml, VLC_ML_ADD_FOLDER, psz_folder );
845 }
846 
847 static inline int vlc_ml_remove_folder( vlc_medialibrary_t* p_ml, const char* psz_folder )
848 {
849  return vlc_ml_control( p_ml, VLC_ML_REMOVE_FOLDER, psz_folder );
850 }
851 
852 static inline int vlc_ml_ban_folder( vlc_medialibrary_t* p_ml, const char* psz_folder )
853 {
854  return vlc_ml_control( p_ml, VLC_ML_BAN_FOLDER, psz_folder );
855 }
856 
857 static inline int vlc_ml_unban_folder( vlc_medialibrary_t* p_ml, const char* psz_folder )
858 {
859  return vlc_ml_control( p_ml, VLC_ML_UNBAN_FOLDER, psz_folder );
860 }
861 
862 static inline int vlc_ml_list_folder( vlc_medialibrary_t* p_ml,
863  vlc_ml_entry_point_list_t** pp_entrypoints )
864 {
865  return vlc_ml_control( p_ml, VLC_ML_LIST_FOLDERS, pp_entrypoints );
866 }
867 
868 static inline int vlc_ml_is_indexed( vlc_medialibrary_t* p_ml,
869  const char* psz_mrl, bool* p_res )
870 {
871  return vlc_ml_control( p_ml, VLC_ML_IS_INDEXED, psz_mrl, p_res );
872 }
873 
874 static inline int vlc_ml_reload_folder( vlc_medialibrary_t* p_ml, const char* psz_mrl )
875 {
876  return vlc_ml_control( p_ml, VLC_ML_RELOAD_FOLDER, psz_mrl );
877 }
878 
879 static inline int vlc_ml_pause_background( vlc_medialibrary_t* p_ml )
880 {
881  return vlc_ml_control( p_ml, VLC_ML_PAUSE_BACKGROUND );
882 }
883 
884 static inline int vlc_ml_resume_background( vlc_medialibrary_t* p_ml )
885 {
887 }
888 
889 static inline int vlc_ml_clear_history( vlc_medialibrary_t* p_ml )
890 {
891  return vlc_ml_control( p_ml, VLC_ML_CLEAR_HISTORY );
892 }
893 
894 static inline vlc_ml_media_t* vlc_ml_new_external_media( vlc_medialibrary_t* p_ml, const char* psz_mrl )
895 {
896  vlc_ml_media_t* res;
897  if ( vlc_ml_control( p_ml, VLC_ML_NEW_EXTERNAL_MEDIA, psz_mrl, &res ) != VLC_SUCCESS )
898  return NULL;
899  return res;
900 }
901 
902 static inline vlc_ml_media_t* vlc_ml_new_stream( vlc_medialibrary_t* p_ml, const char* psz_mrl )
903 {
904  vlc_ml_media_t* res;
905  if ( vlc_ml_control( p_ml, VLC_ML_NEW_STREAM, psz_mrl, &res ) != VLC_SUCCESS )
906  return NULL;
907  return res;
908 }
909 
910 static inline int vlc_ml_media_increase_playcount( vlc_medialibrary_t* p_ml, int64_t i_media_id )
911 {
912  return vlc_ml_control( p_ml, VLC_ML_MEDIA_INCREASE_PLAY_COUNT, i_media_id );
913 }
914 
915 static inline int vlc_ml_media_get_playback_state( vlc_medialibrary_t* p_ml, int64_t i_media_id, int i_state, char** ppsz_result )
916 {
917  return vlc_ml_control( p_ml, VLC_ML_MEDIA_GET_MEDIA_PLAYBACK_STATE, i_media_id, i_state, ppsz_result );
918 }
919 
920 static inline int vlc_ml_media_set_playback_state( vlc_medialibrary_t* p_ml, int64_t i_media_id, int i_state, const char* psz_value )
921 {
922  return vlc_ml_control( p_ml, VLC_ML_MEDIA_SET_MEDIA_PLAYBACK_STATE, i_media_id, i_state, psz_value );
923 }
924 
926  int64_t i_media_id,
928 {
929  return vlc_ml_control( p_ml,VLC_ML_MEDIA_GET_ALL_MEDIA_PLAYBACK_STATES, i_media_id, prefs );
930 }
931 
933  int64_t i_media_id,
934  const vlc_ml_playback_states_all* prefs )
935 {
936  return vlc_ml_control( p_ml, VLC_ML_MEDIA_SET_ALL_MEDIA_PLAYBACK_STATES, i_media_id, prefs );
937 }
938 
939 static inline int vlc_ml_media_set_thumbnail( vlc_medialibrary_t* p_ml, int64_t i_media_id,
940  const char* psz_mrl, vlc_ml_thumbnail_size_t sizeType )
941 {
942  return vlc_ml_control( p_ml, VLC_ML_MEDIA_SET_THUMBNAIL, i_media_id, psz_mrl, sizeType );
943 }
944 
945 static inline int vlc_ml_media_generate_thumbnail( vlc_medialibrary_t* p_ml, int64_t i_media_id,
947  uint32_t i_desired_width,
948  uint32_t i_desired_height,
949  float position )
950 {
951  return vlc_ml_control( p_ml, VLC_ML_MEDIA_GENERATE_THUMBNAIL, i_media_id,
952  size_type, i_desired_width, i_desired_height, position );
953 }
954 
955 static inline int vlc_ml_media_add_external_mrl( vlc_medialibrary_t* p_ml, int64_t i_media_id,
956  const char* psz_mrl, int i_type )
957 {
958  return vlc_ml_control( p_ml, VLC_ML_MEDIA_ADD_EXTERNAL_MRL, i_media_id, psz_mrl, i_type );
959 }
960 
961 static inline int vlc_ml_media_set_type( vlc_medialibrary_t* p_ml, int64_t i_media_id,
963 {
964  return vlc_ml_control( p_ml, VLC_ML_MEDIA_SET_TYPE, i_media_id, (int)i_type );
965 }
966 
967 static inline vlc_ml_media_t* vlc_ml_get_media( vlc_medialibrary_t* p_ml, int64_t i_media_id )
968 {
969  return (vlc_ml_media_t*)vlc_ml_get( p_ml, VLC_ML_GET_MEDIA, i_media_id );
970 }
971 
973  const char* psz_mrl )
974 {
976 }
977 
978 static inline input_item_t* vlc_ml_get_input_item( vlc_medialibrary_t* p_ml, int64_t i_media_id )
979 {
980  return (input_item_t*)vlc_ml_get( p_ml, VLC_ML_GET_INPUT_ITEM, i_media_id );
981 }
982 
984  const char* psz_mrl )
985 {
987 }
988 
989 static inline vlc_ml_album_t* vlc_ml_get_album( vlc_medialibrary_t* p_ml, int64_t i_album_id )
990 {
991  return (vlc_ml_album_t*)vlc_ml_get( p_ml, VLC_ML_GET_ALBUM, i_album_id );
992 }
993 
994 static inline vlc_ml_artist_t* vlc_ml_get_artist( vlc_medialibrary_t* p_ml, int64_t i_artist_id )
995 {
996  return (vlc_ml_artist_t*)vlc_ml_get( p_ml, VLC_ML_GET_ARTIST, i_artist_id );
997 }
998 
999 static inline vlc_ml_genre_t* vlc_ml_get_genre( vlc_medialibrary_t* p_ml, int64_t i_genre_id )
1001  return (vlc_ml_genre_t*)vlc_ml_get( p_ml, VLC_ML_GET_GENRE, i_genre_id );
1002 }
1003 
1004 static inline vlc_ml_show_t* vlc_ml_get_show( vlc_medialibrary_t* p_ml, int64_t i_show_id )
1006  return (vlc_ml_show_t*)vlc_ml_get( p_ml, VLC_ML_GET_SHOW, i_show_id );
1007 }
1008 
1009 static inline vlc_ml_playlist_t* vlc_ml_get_playlist( vlc_medialibrary_t* p_ml, int64_t i_playlist_id )
1011  return (vlc_ml_playlist_t*)vlc_ml_get( p_ml, VLC_ML_GET_PLAYLIST, i_playlist_id );
1012 }
1013 
1014 static inline vlc_ml_media_list_t* vlc_ml_list_media_of( vlc_medialibrary_t* p_ml, const vlc_ml_query_params_t* params, int i_parent_type, int64_t i_parent_id )
1016  vlc_assert( p_ml != NULL );
1017  vlc_ml_media_list_t* res;
1018  if ( vlc_ml_list( p_ml, VLC_ML_LIST_MEDIA_OF, params, i_parent_type, i_parent_id, &res ) != VLC_SUCCESS )
1019  return NULL;
1020  return res;
1021 }
1022 
1023 static inline size_t vlc_ml_count_media_of( vlc_medialibrary_t* p_ml, const vlc_ml_query_params_t* params, int i_parent_type, int64_t i_parent_id )
1025  vlc_assert( p_ml != NULL );
1026  size_t res;
1027  if ( vlc_ml_list( p_ml, VLC_ML_COUNT_MEDIA_OF, params, i_parent_type, i_parent_id, &res ) != VLC_SUCCESS )
1028  return 0;
1029  return res;
1030 }
1031 
1032 static inline vlc_ml_artist_list_t* vlc_ml_list_artist_of( vlc_medialibrary_t* p_ml, const vlc_ml_query_params_t* params, int i_parent_type, int64_t i_parent_id )
1034  vlc_assert( p_ml != NULL );
1035  vlc_ml_artist_list_t* res;
1036  if ( vlc_ml_list( p_ml, VLC_ML_LIST_ARTISTS_OF, params, i_parent_type, i_parent_id, &res ) != VLC_SUCCESS )
1037  return NULL;
1038  return res;
1039 }
1040 
1041 static inline size_t vlc_ml_count_artists_of( vlc_medialibrary_t* p_ml, const vlc_ml_query_params_t* params, int i_parent_type, int64_t i_parent_id )
1043  vlc_assert( p_ml != NULL );
1044  size_t res;
1045  if ( vlc_ml_list( p_ml, VLC_ML_COUNT_ARTISTS_OF, params, i_parent_type, i_parent_id, &res ) != VLC_SUCCESS )
1046  return 0;
1047  return res;
1048 }
1049 
1050 static inline vlc_ml_album_list_t* vlc_ml_list_albums_of( vlc_medialibrary_t* p_ml, const vlc_ml_query_params_t* params, int i_parent_type, int64_t i_parent_id )
1052  vlc_assert( p_ml != NULL );
1053  vlc_ml_album_list_t* res;
1054  if ( vlc_ml_list( p_ml, VLC_ML_LIST_ALBUMS_OF, params, i_parent_type, i_parent_id, &res ) != VLC_SUCCESS )
1055  return NULL;
1056  return res;
1057 }
1058 
1059 static inline size_t vlc_ml_count_albums_of( vlc_medialibrary_t* p_ml, const vlc_ml_query_params_t* params, int i_parent_type, int64_t i_parent_id )
1061  vlc_assert( p_ml != NULL );
1062  size_t res;
1063  if ( vlc_ml_list( p_ml, VLC_ML_COUNT_ALBUMS_OF, params, i_parent_type, i_parent_id, &res ) != VLC_SUCCESS )
1064  return 0;
1065  return res;
1066 }
1067 
1068 static inline vlc_ml_media_list_t* vlc_ml_list_album_tracks( vlc_medialibrary_t* p_ml, const vlc_ml_query_params_t* params, int64_t i_album_id )
1070  vlc_assert( p_ml != NULL );
1071  vlc_ml_media_list_t* res;
1072  if ( vlc_ml_list( p_ml, VLC_ML_LIST_ALBUM_TRACKS, params, i_album_id, &res ) != VLC_SUCCESS )
1073  return NULL;
1074  return res;
1075 }
1076 
1077 static inline size_t vlc_ml_count_album_tracks( vlc_medialibrary_t* p_ml, const vlc_ml_query_params_t* params, int64_t i_album_id )
1079  vlc_assert( p_ml != NULL );
1080  size_t count;
1081  if ( vlc_ml_list( p_ml, VLC_ML_COUNT_ALBUM_TRACKS, params, i_album_id, &count ) != VLC_SUCCESS )
1082  return 0;
1083  return count;
1084 }
1085 
1086 static inline vlc_ml_media_list_t* vlc_ml_list_album_artists( vlc_medialibrary_t* p_ml, const vlc_ml_query_params_t* params, int64_t i_album_id )
1088  vlc_assert( p_ml != NULL );
1089  vlc_ml_media_list_t* res;
1090  if ( vlc_ml_list( p_ml, VLC_ML_LIST_ALBUM_ARTISTS, params, i_album_id, &res ) != VLC_SUCCESS )
1091  return NULL;
1092  return res;
1093 }
1094 
1095 static inline size_t vlc_ml_count_album_artists( vlc_medialibrary_t* p_ml, const vlc_ml_query_params_t* params, int64_t i_album_id )
1097  vlc_assert( p_ml != NULL );
1098  size_t count;
1099  if ( vlc_ml_list( p_ml, VLC_ML_COUNT_ALBUM_ARTISTS, params, i_album_id, &count ) != VLC_SUCCESS )
1100  return 0;
1101  return count;
1102 }
1103 
1104 static inline vlc_ml_album_list_t* vlc_ml_list_artist_albums( vlc_medialibrary_t* p_ml, const vlc_ml_query_params_t* params, int64_t i_artist_id )
1106  vlc_assert( p_ml != NULL );
1107  vlc_ml_album_list_t* res;
1108  if ( vlc_ml_list( p_ml, VLC_ML_LIST_ARTIST_ALBUMS, params, i_artist_id, &res ) != VLC_SUCCESS )
1109  return NULL;
1110  return res;
1111 }
1112 
1113 static inline size_t vlc_ml_count_artist_albums( vlc_medialibrary_t* p_ml, const vlc_ml_query_params_t* params, int64_t i_artist_id )
1115  vlc_assert( p_ml != NULL );
1116  size_t count;
1117  if ( vlc_ml_list( p_ml, VLC_ML_COUNT_ARTIST_ALBUMS, params, i_artist_id, &count ) != VLC_SUCCESS )
1118  return 0;
1119  return count;
1120 }
1121 
1122 static inline vlc_ml_media_list_t* vlc_ml_list_artist_tracks( vlc_medialibrary_t* p_ml, const vlc_ml_query_params_t* params, int64_t i_artist_id )
1124  vlc_assert( p_ml != NULL );
1125  vlc_ml_media_list_t* res;
1126  if ( vlc_ml_list( p_ml, VLC_ML_LIST_ARTIST_TRACKS, params, i_artist_id, &res ) != VLC_SUCCESS )
1127  return NULL;
1128  return res;
1129 }
1130 
1131 static inline size_t vlc_ml_count_artist_tracks( vlc_medialibrary_t* p_ml, const vlc_ml_query_params_t* params, int64_t i_artist_id )
1133  vlc_assert( p_ml != NULL );
1134  size_t count;
1135  if ( vlc_ml_list( p_ml, VLC_ML_COUNT_ARTIST_TRACKS, params, i_artist_id, &count ) != VLC_SUCCESS )
1136  return 0;
1137  return count;
1138 }
1139 
1142  vlc_assert( p_ml != NULL );
1143  vlc_ml_media_list_t* res;
1144  if ( vlc_ml_list( p_ml, VLC_ML_LIST_VIDEOS, params, &res ) != VLC_SUCCESS )
1145  return NULL;
1146  return res;
1147 }
1148 
1149 static inline size_t vlc_ml_count_video_media( vlc_medialibrary_t* p_ml, const vlc_ml_query_params_t* params )
1151  vlc_assert( p_ml != NULL );
1152  size_t count;
1153  if ( vlc_ml_list( p_ml, VLC_ML_COUNT_VIDEOS, params, &count ) != VLC_SUCCESS )
1154  return 0;
1155  return count;
1156 }
1157 
1160  vlc_assert( p_ml != NULL );
1161  vlc_ml_media_list_t* res;
1162  if ( vlc_ml_list( p_ml, VLC_ML_LIST_AUDIOS, params, &res ) != VLC_SUCCESS )
1163  return NULL;
1164  return res;
1165 }
1166 
1167 static inline size_t vlc_ml_count_audio_media( vlc_medialibrary_t* p_ml, const vlc_ml_query_params_t* params )
1169  vlc_assert( p_ml != NULL );
1170  size_t count;
1171  if ( vlc_ml_list( p_ml, VLC_ML_COUNT_AUDIOS, params, &count ) != VLC_SUCCESS )
1172  return 0;
1173  return count;
1174 }
1175 
1178  vlc_assert( p_ml != NULL );
1179  vlc_ml_album_list_t* res;
1180  if ( vlc_ml_list( p_ml, VLC_ML_LIST_ALBUMS, params, &res ) != VLC_SUCCESS )
1181  return NULL;
1182  return res;
1183 }
1184 
1185 static inline size_t vlc_ml_count_albums( vlc_medialibrary_t* p_ml, const vlc_ml_query_params_t* params )
1187  vlc_assert( p_ml != NULL );
1188  size_t count;
1189  if ( vlc_ml_list( p_ml, VLC_ML_COUNT_ALBUMS, params, &count ) != VLC_SUCCESS )
1190  return 0;
1191  return count;
1192 }
1193 
1196  vlc_assert( p_ml != NULL );
1197  vlc_ml_genre_list_t* res;
1198  if ( vlc_ml_list( p_ml, VLC_ML_LIST_GENRES, params, &res ) != VLC_SUCCESS )
1199  return NULL;
1200  return res;
1201 }
1202 
1203 static inline size_t vlc_ml_count_genres( vlc_medialibrary_t* p_ml, const vlc_ml_query_params_t* params )
1205  vlc_assert( p_ml != NULL );
1206  size_t count;
1207  if ( vlc_ml_list( p_ml, VLC_ML_COUNT_GENRES, params, &count ) != VLC_SUCCESS )
1208  return 0;
1209  return count;
1210 }
1211 
1212 /**
1213  * @brief vlc_ml_list_artists
1214  * @param params Query parameters, or NULL for the default
1215  * @param b_include_all True if you wish to fetch artists without at least one album.
1216  * @return
1217  */
1218 static inline vlc_ml_artist_list_t* vlc_ml_list_artists( vlc_medialibrary_t* p_ml, const vlc_ml_query_params_t* params, bool b_include_all )
1220  vlc_assert( p_ml != NULL );
1221  vlc_ml_artist_list_t* res;
1222  if ( vlc_ml_list( p_ml, VLC_ML_LIST_ARTISTS, params, (int)b_include_all, &res ) != VLC_SUCCESS )
1223  return NULL;
1224  return res;
1225 }
1226 
1227 static inline size_t vlc_ml_count_artists( vlc_medialibrary_t* p_ml, const vlc_ml_query_params_t* params, bool includeAll )
1229  vlc_assert( p_ml != NULL );
1230  size_t count;
1231  if ( vlc_ml_list( p_ml, VLC_ML_COUNT_ARTISTS, params, includeAll, &count ) != VLC_SUCCESS )
1232  return 0;
1233  return count;
1234 }
1235 
1238  vlc_assert( p_ml != NULL );
1239  vlc_ml_show_list_t* res;
1240  if ( vlc_ml_list( p_ml, VLC_ML_LIST_SHOWS, params, &res ) != VLC_SUCCESS )
1241  return NULL;
1242  return res;
1243 }
1244 
1245 static inline size_t vlc_ml_count_shows( vlc_medialibrary_t* p_ml, const vlc_ml_query_params_t* params )
1247  vlc_assert( p_ml != NULL );
1248  size_t count;
1249  if ( vlc_ml_list( p_ml, VLC_ML_COUNT_SHOWS, params, &count ) != VLC_SUCCESS )
1250  return 0;
1251  return count;
1252 }
1253 
1254 static inline vlc_ml_media_list_t* vlc_ml_list_genre_artists( vlc_medialibrary_t* p_ml, const vlc_ml_query_params_t* params, int64_t i_genre_id )
1256  vlc_assert( p_ml != NULL );
1257  vlc_ml_media_list_t* res;
1258  if ( vlc_ml_list( p_ml, VLC_ML_LIST_GENRE_ARTISTS, params, i_genre_id, &res ) != VLC_SUCCESS )
1259  return NULL;
1260  return res;
1261 }
1262 
1263 static inline size_t vlc_ml_count_genre_artists( vlc_medialibrary_t* p_ml, const vlc_ml_query_params_t* params, int64_t i_genre_id )
1265  vlc_assert( p_ml != NULL );
1266  size_t count;
1267  if ( vlc_ml_list( p_ml, VLC_ML_COUNT_GENRE_ARTISTS, params, i_genre_id, &count ) != VLC_SUCCESS )
1268  return 0;
1269  return count;
1270 }
1271 
1272 static inline vlc_ml_media_list_t* vlc_ml_list_genre_tracks( vlc_medialibrary_t* p_ml, const vlc_ml_query_params_t* params, int64_t i_genre_id )
1274  vlc_assert( p_ml != NULL );
1275  vlc_ml_media_list_t* res;
1276  if ( vlc_ml_list( p_ml, VLC_ML_LIST_GENRE_TRACKS, params, i_genre_id, &res ) != VLC_SUCCESS )
1277  return NULL;
1278  return res;
1279 }
1280 
1281 static inline size_t vlc_ml_count_genre_tracks( vlc_medialibrary_t* p_ml, const vlc_ml_query_params_t* params, int64_t i_genre_id )
1283  vlc_assert( p_ml != NULL );
1284  size_t count;
1285  if ( vlc_ml_list( p_ml, VLC_ML_COUNT_GENRE_TRACKS, params, i_genre_id, &count ) != VLC_SUCCESS )
1286  return 0;
1287  return count;
1288 }
1289 
1290 static inline vlc_ml_album_list_t* vlc_ml_list_genre_albums( vlc_medialibrary_t* p_ml, const vlc_ml_query_params_t* params, int64_t i_genre_id )
1292  vlc_assert( p_ml != NULL );
1293  vlc_ml_album_list_t* res;
1294  if ( vlc_ml_list( p_ml, VLC_ML_LIST_GENRE_ALBUMS, params, i_genre_id, &res ) != VLC_SUCCESS )
1295  return NULL;
1296  return res;
1297 }
1298 
1299 static inline size_t vlc_ml_count_genre_albums( vlc_medialibrary_t* p_ml, const vlc_ml_query_params_t* params, int64_t i_genre_id )
1301  vlc_assert( p_ml != NULL );
1302  size_t count;
1303  if ( vlc_ml_list( p_ml, VLC_ML_COUNT_GENRE_ALBUMS, params, i_genre_id, &count ) != VLC_SUCCESS )
1304  return 0;
1305  return count;
1306 }
1307 
1308 static inline vlc_ml_media_list_t* vlc_ml_list_show_episodes( vlc_medialibrary_t* p_ml, const vlc_ml_query_params_t* params, int64_t i_show_id )
1310  vlc_assert( p_ml != NULL );
1311  vlc_ml_media_list_t* res;
1312  if ( vlc_ml_list( p_ml, VLC_ML_LIST_SHOW_EPISODES, params, i_show_id, &res ) != VLC_SUCCESS )
1313  return NULL;
1314  return res;
1315 }
1316 
1317 static inline size_t vlc_ml_count_show_episodes( vlc_medialibrary_t* p_ml, const vlc_ml_query_params_t* params, int64_t i_show_id )
1319  vlc_assert( p_ml != NULL );
1320  size_t count;
1321  if ( vlc_ml_list( p_ml, VLC_ML_COUNT_GENRE_ALBUMS, params, i_show_id, &count ) != VLC_SUCCESS )
1322  return 0;
1323  return count;
1324 }
1325 
1326 static inline vlc_ml_label_list_t* vlc_ml_list_media_labels( vlc_medialibrary_t* p_ml, const vlc_ml_query_params_t* params, int64_t i_media_id )
1328  vlc_assert( p_ml != NULL );
1329  vlc_ml_label_list_t* res;
1330  if ( vlc_ml_list( p_ml, VLC_ML_LIST_MEDIA_LABELS, params, i_media_id, &res ) != VLC_SUCCESS )
1331  return NULL;
1332  return res;
1333 }
1334 
1335 static inline size_t vlc_ml_count_media_labels( vlc_medialibrary_t* p_ml, const vlc_ml_query_params_t* params, int64_t i_media_id )
1337  vlc_assert( p_ml != NULL );
1338  size_t count;
1339  if ( vlc_ml_list( p_ml, VLC_ML_LIST_MEDIA_LABELS, params, i_media_id, &count ) != VLC_SUCCESS )
1340  return 0;
1341  return count;
1342 }
1343 
1346  vlc_assert( p_ml != NULL );
1347  vlc_ml_media_list_t* res;
1348  if ( vlc_ml_list( p_ml, VLC_ML_LIST_HISTORY, params, &res ) != VLC_SUCCESS )
1349  return NULL;
1350  return res;
1351 }
1352 
1355  vlc_assert( p_ml != NULL );
1356  vlc_ml_media_list_t* res;
1357  if ( vlc_ml_list( p_ml, VLC_ML_LIST_STREAM_HISTORY, params, &res ) != VLC_SUCCESS )
1358  return NULL;
1359  return res;
1360 }
1361 
1364  vlc_assert( p_ml != NULL );
1366  if ( vlc_ml_list( p_ml, VLC_ML_LIST_PLAYLISTS, params, &res ) != VLC_SUCCESS )
1367  return NULL;
1368  return res;
1369 }
1370 
1371 static inline size_t vlc_ml_count_playlists( vlc_medialibrary_t* p_ml, const vlc_ml_query_params_t* params )
1373  vlc_assert( p_ml != NULL );
1374  size_t count;
1375  if ( vlc_ml_list( p_ml, VLC_ML_COUNT_PLAYLISTS, params, &count ) != VLC_SUCCESS )
1376  return 0;
1377  return count;
1378 }
1379 
1380 static inline vlc_ml_media_list_t* vlc_ml_list_playlist_media( vlc_medialibrary_t* p_ml, const vlc_ml_query_params_t* params, int64_t i_playlist_id )
1382  vlc_assert( p_ml != NULL );
1383  vlc_ml_media_list_t* res;
1384  if ( vlc_ml_list( p_ml, VLC_ML_LIST_PLAYLIST_MEDIA, params, i_playlist_id, &res ) != VLC_SUCCESS )
1385  return NULL;
1386  return res;
1387 }
1388 
1389 static inline size_t vlc_ml_count_playlist_media( vlc_medialibrary_t* p_ml, const vlc_ml_query_params_t* params, int64_t i_playlist_id )
1391  vlc_assert( p_ml != NULL );
1392  size_t count;
1393  if ( vlc_ml_list( p_ml, VLC_ML_COUNT_PLAYLIST_MEDIA, params, i_playlist_id, &count ) != VLC_SUCCESS )
1394  return 0;
1395  return count;
1396 }
1397 
1398 #ifdef __cplusplus
1399 }
1400 #endif /* C++ */
1401 
1402 #ifndef __cplusplus
1403 # define vlc_ml_release( OBJ ) _Generic( ( OBJ ), \
1404  vlc_ml_show_t*: vlc_ml_show_release, \
1405  vlc_ml_artist_t*: vlc_ml_artist_release, \
1406  vlc_ml_album_t*: vlc_ml_album_release, \
1407  vlc_ml_genre_t*: vlc_ml_genre_release, \
1408  vlc_ml_media_t*: vlc_ml_media_release, \
1409  vlc_ml_playlist_t*: vlc_ml_playlist_release, \
1410  vlc_ml_label_list_t*: vlc_ml_label_list_release, \
1411  vlc_ml_file_list_t*: vlc_ml_file_list_release, \
1412  vlc_ml_artist_list_t*: vlc_ml_artist_list_release, \
1413  vlc_ml_media_list_t*: vlc_ml_media_list_release, \
1414  vlc_ml_album_list_t*: vlc_ml_album_list_release, \
1415  vlc_ml_show_list_t*: vlc_ml_show_list_release, \
1416  vlc_ml_genre_list_t*: vlc_ml_genre_list_release, \
1417  vlc_ml_playlist_list_t*: vlc_ml_playlist_list_release, \
1418  vlc_ml_entry_point_list_t*: vlc_ml_entry_point_list_release, \
1419  vlc_ml_playback_states_all*: vlc_ml_playback_states_all_release \
1420  )( OBJ )
1421 #else
1422 static inline void vlc_ml_release( vlc_ml_show_t* show ) { vlc_ml_show_release( show ); }
1423 static inline void vlc_ml_release( vlc_ml_artist_t* artist ) { vlc_ml_artist_release( artist ); }
1424 static inline void vlc_ml_release( vlc_ml_album_t* album ) { vlc_ml_album_release( album ); }
1425 static inline void vlc_ml_release( vlc_ml_genre_t* genre ) { vlc_ml_genre_release( genre ); }
1426 static inline void vlc_ml_release( vlc_ml_media_t* media ) { vlc_ml_media_release( media ); }
1427 static inline void vlc_ml_release( vlc_ml_playlist_t* playlist ) { vlc_ml_playlist_release( playlist ); }
1428 static inline void vlc_ml_release( vlc_ml_label_list_t* list ) { vlc_ml_label_list_release( list ); }
1429 static inline void vlc_ml_release( vlc_ml_file_list_t* list ) { vlc_ml_file_list_release( list ); }
1430 static inline void vlc_ml_release( vlc_ml_artist_list_t* list ) { vlc_ml_artist_list_release( list ); }
1431 static inline void vlc_ml_release( vlc_ml_media_list_t* list ) { vlc_ml_media_list_release( list ); }
1432 static inline void vlc_ml_release( vlc_ml_album_list_t* list ) { vlc_ml_album_list_release( list ); }
1433 static inline void vlc_ml_release( vlc_ml_show_list_t* list ) { vlc_ml_show_list_release( list ); }
1434 static inline void vlc_ml_release( vlc_ml_genre_list_t* list ) { vlc_ml_genre_list_release( list ); }
1435 static inline void vlc_ml_release( vlc_ml_playlist_list_t* list ) { vlc_ml_playlist_list_release( list ); }
1436 static inline void vlc_ml_release( vlc_ml_entry_point_list_t* list ) { vlc_ml_entry_point_list_release( list ); }
1437 static inline void vlc_ml_release( vlc_ml_playback_states_all* prefs ) { vlc_ml_playback_states_all_release( prefs ); }
1438 #endif
1439 
1440 #endif /* VLC_MEDIA_LIBRARY_H */
Definition: vlc_media_library.h:84
vlc_ml_track_type_t
Definition: vlc_media_library.h:63
arg1: genre id; arg2 (out): vlc_ml_media_list_t**
Definition: vlc_media_library.h:396
Definition: vlc_media_library.h:540
struct vlc_ml_event_t vlc_ml_event_t
arg1: media id; arg2: vlc_ml_playback_state; arg3: const char*;
Definition: vlc_media_library.h:462
Sent when an entry point ban request has been processed.
Definition: vlc_media_library.h:607
vlc_medialibrary_t * libvlc_MlCreate(libvlc_int_t *p_libvlc)
Definition: medialibrary.c:102
Definition: vlc_media_library.h:47
static size_t vlc_ml_count_show_episodes(vlc_medialibrary_t *p_ml, const vlc_ml_query_params_t *params, int64_t i_show_id)
Definition: vlc_media_library.h:1318
arg1: mrl (const char*) arg2 (out): bool*; res: can fail
Definition: vlc_media_library.h:440
static size_t vlc_ml_count_genre_artists(vlc_medialibrary_t *p_ml, const vlc_ml_query_params_t *params, int64_t i_genre_id)
Definition: vlc_media_library.h:1264
vlc_ml_sorting_criteria_t
Definition: vlc_media_library.h:316
Definition: vlc_media_library.h:493
arg1: media id; can fail
Definition: vlc_media_library.h:460
Definition: vlc_media_library.h:495
Definition: vlc_media_library.h:284
static size_t vlc_ml_count_artists(vlc_medialibrary_t *p_ml, const vlc_ml_query_params_t *params, bool includeAll)
Definition: vlc_media_library.h:1228
arg1: The album id.
Definition: vlc_media_library.h:383
static vlc_ml_query_params_t vlc_ml_query_params_create()
Definition: vlc_media_library.h:832
Definition: medialibrary.c:34
Definition: vlc_media_library.h:185
void vlc_ml_entry_point_list_release(vlc_ml_entry_point_list_t *p_list)
Definition: medialibrary.c:331
Definition: vlc_media_library.h:490
Definition: vlc_media_library.h:108
struct vlc_ml_media_track_list_t vlc_ml_media_track_list_t
arg1: parent entity type; arg2: parent entity id; arg3(out): size_t*
Definition: vlc_media_library.h:415
Sent when an entry point unban request has been processed.
Definition: vlc_media_library.h:614
vlc_ml_event_callback_t * vlc_ml_event_register_callback(vlc_medialibrary_t *p_ml, vlc_ml_callback_t cb, void *p_data)
Registers a medialibrary callback.
Definition: medialibrary.c:67
vlc_ml_parent_type
Definition: vlc_media_library.h:422
static size_t vlc_ml_count_media_labels(vlc_medialibrary_t *p_ml, const vlc_ml_query_params_t *params, int64_t i_media_id)
Definition: vlc_media_library.h:1336
arg1: Show ID; ret: vlc_ml_show_t*
Definition: vlc_media_library.h:356
Definition: vlc_media_library.h:534
vlc_ml_event_type
Definition: vlc_media_library.h:519
Definition: vlc_media_library.h:49
Definition: vlc_media_library.h:67
Definition: vlc_media_library.h:500
arg1: mrl (const char*) res: can&#39;t fail
Definition: vlc_media_library.h:435
Definition: vlc_media_library.h:334
arg1: genre id; arg2 (out): vlc_ml_artist_list_t**
Definition: vlc_media_library.h:394
arg1: show id; arg2(out): vlc_ml_media_list_t**
Definition: vlc_media_library.h:402
#define vlc_ml_instance_get(x)
Definition: vlc_media_library.h:782
arg1: The artist id.
Definition: vlc_media_library.h:391
arg1: playlist id; arg2 (out): vlc_ml_media_list_t**
Definition: vlc_media_library.h:410
vlc_ml_history_type_t
Definition: vlc_media_library.h:78
static vlc_ml_show_t * vlc_ml_get_show(vlc_medialibrary_t *p_ml, int64_t i_show_id)
Definition: vlc_media_library.h:1005
const char * psz_pattern
Definition: vlc_media_library.h:340
arg1: media id; arg2: const vlc_ml_playback_states_all*
Definition: vlc_media_library.h:464
static vlc_ml_album_t * vlc_ml_get_album(vlc_medialibrary_t *p_ml, int64_t i_album_id)
Definition: vlc_media_library.h:990
arg1 (out): size_t*
Definition: vlc_media_library.h:367
Describes an input and is used to spawn input_thread_t objects.
Definition: vlc_input_item.h:77
void vlc_ml_show_release(vlc_ml_show_t *p_show)
Definition: medialibrary.c:149
Definition: vlc_media_library.h:541
arg1: genre id; arg2 (out): size_t*
Definition: vlc_media_library.h:399
void vlc_ml_playlist_release(vlc_ml_playlist_t *p_playlist)
Definition: medialibrary.c:240
Definition: vlc_media_library.h:130
static size_t vlc_ml_count_shows(vlc_medialibrary_t *p_ml, const vlc_ml_query_params_t *params)
Definition: vlc_media_library.h:1246
static size_t vlc_ml_count_artists_of(vlc_medialibrary_t *p_ml, const vlc_ml_query_params_t *params, int i_parent_type, int64_t i_parent_id)
Definition: vlc_media_library.h:1042
arg1: media id; arg2: const char*; arg3: vlc_ml_thumbnail_size_t
Definition: vlc_media_library.h:465
struct vlc_ml_genre_t vlc_ml_genre_t
arg1: The artist id.
Definition: vlc_media_library.h:390
Definition: vlc_media_library.h:501
arg1: mrl (const char*) res: can&#39;t fail
Definition: vlc_media_library.h:436
Definition: vlc_media_library.h:329
Definition: vlc_media_library.h:327
void vlc_ml_show_list_release(vlc_ml_show_list_t *p_list)
Definition: medialibrary.c:304
static vlc_ml_media_list_t * vlc_ml_list_history(vlc_medialibrary_t *p_ml, const vlc_ml_query_params_t *params)
Definition: vlc_media_library.h:1345
arg1 (out): vlc_ml_genre_list_t**
Definition: vlc_media_library.h:370
Definition: vlc_media_library.h:65
arg1: parent entity type; arg2: parent entity id; arg3(out): ml_album_list_t**
Definition: vlc_media_library.h:418
static int vlc_ml_is_indexed(vlc_medialibrary_t *p_ml, const char *psz_mrl, bool *p_res)
Definition: vlc_media_library.h:869
static vlc_ml_media_list_t * vlc_ml_list_playlist_media(vlc_medialibrary_t *p_ml, const vlc_ml_query_params_t *params, int64_t i_playlist_id)
Definition: vlc_media_library.h:1381
static int vlc_ml_resume_background(vlc_medialibrary_t *p_ml)
Definition: vlc_media_library.h:885
Definition: medialibrary.c:41
struct vlc_ml_show_t vlc_ml_show_t
This file is a collection of common definitions and types.
arg1: media id; arg2: vlc_ml_playback_state; arg3: char**;
Definition: vlc_media_library.h:461
const vlc_medialibrary_callbacks_t * cbs
Definition: vlc_media_library.h:775
static vlc_ml_genre_t * vlc_ml_get_genre(vlc_medialibrary_t *p_ml, int64_t i_genre_id)
Definition: vlc_media_library.h:1000
static vlc_ml_media_t * vlc_ml_new_stream(vlc_medialibrary_t *p_ml, const char *psz_mrl)
Definition: vlc_media_library.h:903
arg1 (out): vlc_ml_show_list_t**
Definition: vlc_media_library.h:374
struct vlc_ml_artist_t vlc_ml_artist_t
struct vlc_medialibrary_callbacks_t vlc_medialibrary_callbacks_t
static size_t vlc_ml_count_album_tracks(vlc_medialibrary_t *p_ml, const vlc_ml_query_params_t *params, int64_t i_album_id)
Definition: vlc_media_library.h:1078
struct vlc_ml_label_t vlc_ml_label_t
Definition: vlc_media_library.h:485
struct vlc_ml_genre_list_t vlc_ml_genre_list_t
arg1: mrl (const char*) res: can&#39;t fail
Definition: vlc_media_library.h:438
no args; can&#39;t fail
Definition: vlc_media_library.h:450
arg1: const char*; arg2(out): vlc_ml_media_t**
Definition: vlc_media_library.h:457
Definition: vlc_media_library.h:42
arg1: Genre ID; ret: vlc_ml_genre_t*
Definition: vlc_media_library.h:355
struct vlc_ml_entry_point_t vlc_ml_entry_point_t
Definition: vlc_media_library.h:259
Definition: vlc_media_library.h:80
Definition: vlc_objects.h:115
Definition: vlc_media_library.h:532
Definition: vlc_media_library.h:494
static size_t vlc_ml_count_genre_albums(vlc_medialibrary_t *p_ml, const vlc_ml_query_params_t *params, int64_t i_genre_id)
Definition: vlc_media_library.h:1300
void vlc_ml_label_list_release(vlc_ml_label_list_t *p_list)
Definition: medialibrary.c:258
static vlc_ml_playlist_list_t * vlc_ml_list_playlists(vlc_medialibrary_t *p_ml, const vlc_ml_query_params_t *params)
Definition: vlc_media_library.h:1363
Definition: vlc_media_library.h:489
static int vlc_ml_media_set_all_playback_states(vlc_medialibrary_t *p_ml, int64_t i_media_id, const vlc_ml_playback_states_all *prefs)
Definition: vlc_media_library.h:933
void vlc_ml_playback_states_all_release(vlc_ml_playback_states_all *prefs)
Definition: medialibrary.c:340
struct vlc_ml_media_t vlc_ml_media_t
static size_t vlc_ml_count_genre_tracks(vlc_medialibrary_t *p_ml, const vlc_ml_query_params_t *params, int64_t i_genre_id)
Definition: vlc_media_library.h:1282
Definition: vlc_media_library.h:333
Sent when an entry point discovery is completed.
Definition: vlc_media_library.h:567
arg1 (out): vlc_ml_media_list_t**
Definition: vlc_media_library.h:364
arg1: The album id.
Definition: vlc_media_library.h:382
Internal module descriptor.
Definition: modules.h:75
Definition: vlc_media_library.h:650
static int vlc_ml_media_increase_playcount(vlc_medialibrary_t *p_ml, int64_t i_media_id)
Definition: vlc_media_library.h:911
vlc_ml_media_type_t
Definition: vlc_media_library.h:38
no args; can&#39;t fail
Definition: vlc_media_library.h:453
void vlc_ml_media_release(vlc_ml_media_t *p_media)
Definition: medialibrary.c:250
static vlc_ml_playlist_t * vlc_ml_get_playlist(vlc_medialibrary_t *p_ml, int64_t i_playlist_id)
Definition: vlc_media_library.h:1010
Definition: vlc_media_library.h:331
static vlc_ml_media_list_t * vlc_ml_list_genre_tracks(vlc_medialibrary_t *p_ml, const vlc_ml_query_params_t *params, int64_t i_genre_id)
Definition: vlc_media_library.h:1273
Definition: vlc_media_library.h:58
Definition: vlc_media_library.h:330
void vlc_ml_event_unregister_callback(vlc_medialibrary_t *p_ml, vlc_ml_event_callback_t *p_callback)
Unregisters a medialibrary callback.
Definition: medialibrary.c:81
Definition: vlc_media_library.h:60
arg1: Artist ID; ret: vlc_ml_artist_t*
Definition: vlc_media_library.h:354
Definition: vlc_media_library.h:424
arg1: Playlist ID; ret: vlc_ml_playlist_t*
Definition: vlc_media_library.h:357
Definition: vlc_media_library.h:266
struct vlc_ml_artist_list_t vlc_ml_artist_list_t
static size_t vlc_ml_count_albums(vlc_medialibrary_t *p_ml, const vlc_ml_query_params_t *params)
Definition: vlc_media_library.h:1186
arg1: genre id; arg2 (out): vlc_ml_album_list_t**
Definition: vlc_media_library.h:398
arg1 (out): vlc_ml_media_list_t**
Definition: vlc_media_library.h:379
vlc_ml_thumbnail_size_t
Definition: vlc_media_library.h:70
Definition: vlc_media_library.h:531
static vlc_ml_label_list_t * vlc_ml_list_media_labels(vlc_medialibrary_t *p_ml, const vlc_ml_query_params_t *params, int64_t i_media_id)
Definition: vlc_media_library.h:1327
const char * psz_name
Definition: text_style.c:33
void vlc_ml_genre_release(vlc_ml_genre_t *p_genre)
Definition: medialibrary.c:226
Definition: vlc_media_library.h:290
struct vlc_ml_album_t vlc_ml_album_t
arg1: const char*; arg2(out): vlc_ml_media_t**
Definition: vlc_media_library.h:456
arg1 (out): vlc_ml_playlist_list_t**
Definition: vlc_media_library.h:376
Definition: vlc_media_library.h:535
vlc_ml_playback_state
User playback settings.
Definition: vlc_media_library.h:481
struct vlc_ml_playback_states_all vlc_ml_playback_states_all
struct vlc_ml_file_list_t vlc_ml_file_list_t
arg1: playlist id; arg2 (out): size_t*
Definition: vlc_media_library.h:411
Definition: vlc_media_library.h:50
Definition: vlc_media_library.h:328
static size_t vlc_ml_count_albums_of(vlc_medialibrary_t *p_ml, const vlc_ml_query_params_t *params, int i_parent_type, int64_t i_parent_id)
Definition: vlc_media_library.h:1060
static vlc_ml_album_list_t * vlc_ml_list_artist_albums(vlc_medialibrary_t *p_ml, const vlc_ml_query_params_t *params, int64_t i_artist_id)
Definition: vlc_media_library.h:1105
arg1: media id; arg2: vlc_ml_media_type_t
Definition: vlc_media_library.h:468
Definition: vlc_media_library.h:487
Definition: vlc_media_library.h:136
static input_item_t * vlc_ml_get_input_item_by_mrl(vlc_medialibrary_t *p_ml, const char *psz_mrl)
Definition: vlc_media_library.h:984
arg1: entrypoints (vlc_ml_entry_point_list_t**); res: can fail
Definition: vlc_media_library.h:439
Reload a specific folder, or all.
Definition: vlc_media_library.h:446
Sent when the parsing progress percentage gets updated.
Definition: vlc_media_library.h:629
arg1: Media ID; ret: vlc_ml_media_t*
Definition: vlc_media_library.h:349
Definition: vlc_media_library.h:496
void vlc_ml_playlist_list_release(vlc_ml_playlist_list_t *p_list)
Definition: medialibrary.c:322
void libvlc_MlRelease(vlc_medialibrary_t *p_ml)
Definition: medialibrary.c:120
Definition: vlc_media_library.h:296
static vlc_ml_show_list_t * vlc_ml_list_shows(vlc_medialibrary_t *p_ml, const vlc_ml_query_params_t *params)
Definition: vlc_media_library.h:1237
arg1: parent entity type; arg2: parent entity id; arg3(out): ml_media_list_t**
Definition: vlc_media_library.h:414
vlc_ml_list_queries
Definition: vlc_media_library.h:360
Definition: vlc_media_library.h:272
Definition: vlc_media_library.h:427
Definition: vlc_media_library.h:120
Definition: vlc_media_library.h:426
arg1: parent entity type; arg2: parent entity id; arg3(out): size_t*
Definition: vlc_media_library.h:419
arg1: media id; arg2 (out): size_t*
Definition: vlc_media_library.h:407
struct vlc_ml_album_list_t vlc_ml_album_list_t
struct vlc_ml_show_list_t vlc_ml_show_list_t
void vlc_ml_album_list_release(vlc_ml_album_list_t *p_list)
Definition: medialibrary.c:295
static size_t vlc_ml_count_album_artists(vlc_medialibrary_t *p_ml, const vlc_ml_query_params_t *params, int64_t i_album_id)
Definition: vlc_media_library.h:1096
int i_type
Definition: httpd.c:1270
#define vlc_assert(pred)
Run-time assertion.
Definition: vlc_common.h:267
Sent when an entry point reload is completed.
Definition: vlc_media_library.h:583
struct vlc_ml_show_episode_t vlc_ml_show_episode_t
Definition: vlc_media_library.h:59
int vlc_ml_list(vlc_medialibrary_t *p_ml, int i_query, const vlc_ml_query_params_t *p_params,...)
Definition: medialibrary.c:370
Definition: vlc_media_library.h:428
#define VLC_SUCCESS
No error.
Definition: vlc_common.h:470
static vlc_ml_album_list_t * vlc_ml_list_albums(vlc_medialibrary_t *p_ml, const vlc_ml_query_params_t *params)
Definition: vlc_media_library.h:1177
struct vlc_ml_playlist_t vlc_ml_playlist_t
Definition: vlc_media_library.h:323
size_t count
Definition: core.c:402
Definition: vlc_media_library.h:100
Definition: vlc_media_library.h:228
Definition: vlc_media_library.h:338
struct vlc_ml_playlist_list_t vlc_ml_playlist_list_t
Sent when a new entry point gets added to the database.
Definition: vlc_media_library.h:593
static vlc_ml_media_t * vlc_ml_new_external_media(vlc_medialibrary_t *p_ml, const char *psz_mrl)
Definition: vlc_media_library.h:895
static vlc_ml_media_t * vlc_ml_get_media_by_mrl(vlc_medialibrary_t *p_ml, const char *psz_mrl)
Definition: vlc_media_library.h:973
Definition: vlc_media_library.h:220
vlc_ml_media_subtype_t
Definition: vlc_media_library.h:45
arg1: Media MRL; ret: vlc_ml_media_t*
Definition: vlc_media_library.h:350
Definition: vlc_media_library.h:57
static int vlc_ml_pause_background(vlc_medialibrary_t *p_ml)
Definition: vlc_media_library.h:880
Definition: vlc_media_library.h:191
arg1: media id; arg2 (out): vlc_ml_label_list_t**
Definition: vlc_media_library.h:406
vlc_ml_control
Definition: vlc_media_library.h:432
Definition: vlc_media_library.h:48
Sent when a discoverer or parser threads changes its idle state.
Definition: vlc_media_library.h:621
void(* vlc_ml_callback_t)(void *p_data, const vlc_ml_event_t *p_event)
Definition: vlc_media_library.h:734
arg1 (out): vlc_ml_media_list_t**
Definition: vlc_media_library.h:378
static vlc_ml_media_list_t * vlc_ml_list_genre_artists(vlc_medialibrary_t *p_ml, const vlc_ml_query_params_t *params, int64_t i_genre_id)
Definition: vlc_media_library.h:1255
Definition: vlc_media_library.h:488
static vlc_ml_album_list_t * vlc_ml_list_genre_albums(vlc_medialibrary_t *p_ml, const vlc_ml_query_params_t *params, int64_t i_genre_id)
Definition: vlc_media_library.h:1291
struct vlc_ml_entry_point_list_t vlc_ml_entry_point_list_t
Definition: vlc_media_library.h:539
static size_t vlc_ml_count_audio_media(vlc_medialibrary_t *p_ml, const vlc_ml_query_params_t *params)
Definition: vlc_media_library.h:1168
vlc_ml_get_queries
Definition: vlc_media_library.h:347
static size_t vlc_ml_count_artist_tracks(vlc_medialibrary_t *p_ml, const vlc_ml_query_params_t *params, int64_t i_artist_id)
Definition: vlc_media_library.h:1132
Definition: vlc_media_library.h:72
static int vlc_ml_media_get_playback_state(vlc_medialibrary_t *p_ml, int64_t i_media_id, int i_state, char **ppsz_result)
Definition: vlc_media_library.h:916
Definition: vlc_media_library.h:492
static vlc_ml_genre_list_t * vlc_ml_list_genres(vlc_medialibrary_t *p_ml, const vlc_ml_query_params_t *params)
Definition: vlc_media_library.h:1195
Definition: vlc_media_library.h:326
static size_t vlc_ml_count_video_media(vlc_medialibrary_t *p_ml, const vlc_ml_query_params_t *params)
Definition: vlc_media_library.h:1150
arg1: Album ID; ret: vlc_ml_album_t*
Definition: vlc_media_library.h:353
arg1: The artist id.
Definition: vlc_media_library.h:388
arg1: show id; arg2(out): size_t*
Definition: vlc_media_library.h:403
static vlc_ml_media_list_t * vlc_ml_list_album_tracks(vlc_medialibrary_t *p_ml, const vlc_ml_query_params_t *params, int64_t i_album_id)
Definition: vlc_media_library.h:1069
arg1: The artist id.
Definition: vlc_media_library.h:389
Definition: vlc_media_library.h:741
struct vlc_ml_label_list_t vlc_ml_label_list_t
Definition: vlc_media_library.h:429
int(* pf_list)(struct vlc_medialibrary_module_t *p_ml, int i_query, const vlc_ml_query_params_t *p_params, va_list args)
List some entities from the medialibrary.
Definition: vlc_media_library.h:763
static size_t vlc_ml_count_media_of(vlc_medialibrary_t *p_ml, const vlc_ml_query_params_t *params, int i_parent_type, int64_t i_parent_id)
Definition: vlc_media_library.h:1024
Definition: vlc_media_library.h:536
Definition: vlc_media_library.h:73
static vlc_ml_media_list_t * vlc_ml_list_media_of(vlc_medialibrary_t *p_ml, const vlc_ml_query_params_t *params, int i_parent_type, int64_t i_parent_id)
Definition: vlc_media_library.h:1015
Entity modification callbacks.
Definition: vlc_media_library.h:530
char psz_value[8]
Definition: vout_intf.c:99
void vlc_ml_event_unregister_from_callback(vlc_medialibrary_t *p_ml, vlc_ml_event_callback_t *p_callback)
Unregisters a medialibrary callback from the said callback.
Definition: medialibrary.c:90
static int vlc_ml_media_get_all_playback_pref(vlc_medialibrary_t *p_ml, int64_t i_media_id, vlc_ml_playback_states_all *prefs)
Definition: vlc_media_library.h:926
Definition: vlc_media_library.h:543
arg1: media id; arg2: const char*; arg3: type(vlc_ml_file_type_t)
Definition: vlc_media_library.h:467
arg1 (out): size_t*
Definition: vlc_media_library.h:369
Definition: vlc_media_library.h:498
static input_item_t * vlc_ml_get_input_item(vlc_medialibrary_t *p_ml, int64_t i_media_id)
Definition: vlc_media_library.h:979
#define VLC_API
Definition: fourcc_gen.c:31
Definition: vlc_media_library.h:240
void * vlc_ml_get(vlc_medialibrary_t *p_ml, int i_query,...)
Definition: medialibrary.c:351
static int vlc_ml_add_folder(vlc_medialibrary_t *p_ml, const char *psz_folder)
Definition: vlc_media_library.h:843
arg1: media id; arg2: vlc_ml_thumbnail_size_t; arg3: width; arg4: height; arg5: position ...
Definition: vlc_media_library.h:466
static int vlc_ml_media_set_playback_state(vlc_medialibrary_t *p_ml, int64_t i_media_id, int i_state, const char *psz_value)
Definition: vlc_media_library.h:921
arg1 (out): vlc_ml_media_list_t**
Definition: vlc_media_library.h:366
struct vlc_ml_album_track_t vlc_ml_album_track_t
arg1: Media ID; ret: input_item_t*
Definition: vlc_media_library.h:351
static int vlc_ml_media_generate_thumbnail(vlc_medialibrary_t *p_ml, int64_t i_media_id, vlc_ml_thumbnail_size_t size_type, uint32_t i_desired_width, uint32_t i_desired_height, float position)
Definition: vlc_media_library.h:946
arg1 (out): size_t*
Definition: vlc_media_library.h:371
Definition: vlc_media_library.h:504
static int vlc_ml_reload_folder(vlc_medialibrary_t *p_ml, const char *psz_mrl)
Definition: vlc_media_library.h:875
static int vlc_ml_remove_folder(vlc_medialibrary_t *p_ml, const char *psz_folder)
Definition: vlc_media_library.h:848
arg1 bool: includeAll; arg2 (out): vlc_ml_genre_list_t**
Definition: vlc_media_library.h:372
Definition: vlc_media_library.h:483
arg1: genre id; arg2 (out): size_t*
Definition: vlc_media_library.h:397
arg1 bool: includeAll; arg2 (out): size_t*
Definition: vlc_media_library.h:373
arg1 (out): size_t*
Definition: vlc_media_library.h:377
static vlc_ml_artist_list_t * vlc_ml_list_artist_of(vlc_medialibrary_t *p_ml, const vlc_ml_query_params_t *params, int i_parent_type, int64_t i_parent_id)
Definition: vlc_media_library.h:1033
Definition: vlc_media_library.h:40
Definition: vlc_media_library.h:486
Definition: vlc_media_library.h:75
Definition: vlc_media_library.h:332
no args; can&#39;t fail
Definition: vlc_media_library.h:449
static size_t vlc_ml_count_genres(vlc_medialibrary_t *p_ml, const vlc_ml_query_params_t *params)
Definition: vlc_media_library.h:1204
void vlc_ml_album_release(vlc_ml_album_t *p_album)
Definition: medialibrary.c:218
struct vlc_ml_movie_t vlc_ml_movie_t
struct vlc_ml_file_t vlc_ml_file_t
Definition: vlc_media_library.h:484
Definition: vlc_media_library.h:94
static int vlc_ml_clear_history(vlc_medialibrary_t *p_ml)
Definition: vlc_media_library.h:890
Definition: vlc_media_library.h:497
static vlc_ml_media_list_t * vlc_ml_list_video_media(vlc_medialibrary_t *p_ml, const vlc_ml_query_params_t *params)
Definition: vlc_media_library.h:1141
struct vlc_ml_media_list_t vlc_ml_media_list_t
Definition: vlc_media_library.h:425
arg1: The album id.
Definition: vlc_media_library.h:384
Definition: vlc_media_library.h:537
Definition: vlc_media_library.h:542
static vlc_ml_media_t * vlc_ml_get_media(vlc_medialibrary_t *p_ml, int64_t i_media_id)
Definition: vlc_media_library.h:968
static vlc_ml_artist_list_t * vlc_ml_list_artists(vlc_medialibrary_t *p_ml, const vlc_ml_query_params_t *params, bool b_include_all)
vlc_ml_list_artists
Definition: vlc_media_library.h:1219
Definition: vlc_media_library.h:66
arg1: Media MRL; ret: input_item_t*
Definition: vlc_media_library.h:352
Definition: vlc_media_library.h:736
Sent when an application requested rescan starts being processed.
Definition: vlc_media_library.h:647
static int vlc_ml_ban_folder(vlc_medialibrary_t *p_ml, const char *psz_folder)
Definition: vlc_media_library.h:853
Definition: vlc_media_library.h:246
Definition: vlc_media_library.h:55
void vlc_ml_genre_list_release(vlc_ml_genre_list_t *p_list)
Definition: medialibrary.c:313
struct vlc_ml_thumbnail_t vlc_ml_thumbnail_t
static size_t vlc_ml_count_playlists(vlc_medialibrary_t *p_ml, const vlc_ml_query_params_t *params)
Definition: vlc_media_library.h:1372
arg1: parent entity type; arg2: parent entity id; arg3(out): size_t*
Definition: vlc_media_library.h:417
arg1 (out): size_t*
Definition: vlc_media_library.h:375
Definition: vlc_media_library.h:324
static vlc_ml_media_list_t * vlc_ml_list_artist_tracks(vlc_medialibrary_t *p_ml, const vlc_ml_query_params_t *params, int64_t i_artist_id)
Definition: vlc_media_library.h:1123
arg1: parent entity type; arg2: parent entity id; arg3(out): ml_artist_list_t**
Definition: vlc_media_library.h:416
static vlc_ml_media_list_t * vlc_ml_list_show_episodes(vlc_medialibrary_t *p_ml, const vlc_ml_query_params_t *params, int64_t i_show_id)
Definition: vlc_media_library.h:1309
arg1: media id; arg2(out): vlc_ml_playback_states_all*
Definition: vlc_media_library.h:463
void vlc_ml_file_list_release(vlc_ml_file_list_t *p_list)
Definition: medialibrary.c:267
void vlc_ml_media_list_release(vlc_ml_media_list_t *p_list)
Definition: medialibrary.c:286
static size_t vlc_ml_count_artist_albums(vlc_medialibrary_t *p_ml, const vlc_ml_query_params_t *params, int64_t i_artist_id)
Definition: vlc_media_library.h:1114
static vlc_ml_media_list_t * vlc_ml_list_audio_media(vlc_medialibrary_t *p_ml, const vlc_ml_query_params_t *params)
Definition: vlc_media_library.h:1159
#define vlc_ml_release(OBJ)
Definition: vlc_media_library.h:1404
static vlc_ml_media_list_t * vlc_ml_list_album_artists(vlc_medialibrary_t *p_ml, const vlc_ml_query_params_t *params, int64_t i_album_id)
Definition: vlc_media_library.h:1087
Sent after the history gets changed.
Definition: vlc_media_library.h:643
Definition: vlc_media_library.h:544
static vlc_ml_album_list_t * vlc_ml_list_albums_of(vlc_medialibrary_t *p_ml, const vlc_ml_query_params_t *params, int i_parent_type, int64_t i_parent_id)
Definition: vlc_media_library.h:1051
void vlc_ml_artist_list_release(vlc_ml_artist_list_t *p_list)
Definition: medialibrary.c:276
Definition: vlc_media_library.h:81
Sent when a discovery or reload operation starts analyzing a new folder.
Definition: vlc_media_library.h:559
Definition: vlc_media_library.h:142
static int vlc_ml_media_set_thumbnail(vlc_medialibrary_t *p_ml, int64_t i_media_id, const char *psz_mrl, vlc_ml_thumbnail_size_t sizeType)
Definition: vlc_media_library.h:940
Definition: vlc_media_library.h:538
Definition: vlc_media_library.h:278
Definition: vlc_media_library.h:325
Definition: vlc_media_library.h:157
Definition: vlc_media_library.h:533
void vlc_ml_artist_release(vlc_ml_artist_t *p_artist)
Definition: medialibrary.c:202
VLC object common members.
Definition: vlc_objects.h:43
static vlc_ml_media_list_t * vlc_ml_list_stream_history(vlc_medialibrary_t *p_ml, const vlc_ml_query_params_t *params)
Definition: vlc_media_library.h:1354
arg1: mrl (const char*) res: can&#39;t fail
Definition: vlc_media_library.h:437
static size_t vlc_ml_count_playlist_media(vlc_medialibrary_t *p_ml, const vlc_ml_query_params_t *params, int64_t i_playlist_id)
Definition: vlc_media_library.h:1390
Definition: vlc_media_library.h:41
static int vlc_ml_unban_folder(vlc_medialibrary_t *p_ml, const char *psz_folder)
Definition: vlc_media_library.h:858
static int vlc_ml_list_folder(vlc_medialibrary_t *p_ml, vlc_ml_entry_point_list_t **pp_entrypoints)
Definition: vlc_media_library.h:863
Sent when an entry point removal request has been processed.
Definition: vlc_media_library.h:600
Definition: vlc_media_library.h:499
Sent after a media thumbnail was generated, or if it&#39;s generation failed.
Definition: vlc_media_library.h:636
static int vlc_ml_media_set_type(vlc_medialibrary_t *p_ml, int64_t i_media_id, vlc_ml_media_type_t i_type)
Definition: vlc_media_library.h:962
static vlc_ml_artist_t * vlc_ml_get_artist(vlc_medialibrary_t *p_ml, int64_t i_artist_id)
Definition: vlc_media_library.h:995
bool b_generated
True if a thumbnail is available, or if thumbnail generation was attempted but failed.
Definition: vlc_media_library.h:91
arg1 (out): size_t*
Definition: vlc_media_library.h:365
#define VLC_USED
Definition: fourcc_gen.c:32
vlc_ml_file_type_t
Definition: vlc_media_library.h:53
arg1: The album id.
Definition: vlc_media_library.h:385
Definition: vlc_media_library.h:151
static int vlc_ml_media_add_external_mrl(vlc_medialibrary_t *p_ml, int64_t i_media_id, const char *psz_mrl, int i_type)
Definition: vlc_media_library.h:956
struct vlc_ml_media_track_t vlc_ml_media_track_t
arg1 (out): vlc_ml_album_list_t**
Definition: vlc_media_library.h:368
arg1: genre id; arg2 (out): size_t*
Definition: vlc_media_library.h:395
A discovery started.
Definition: vlc_media_library.h:553
char * psz_mrl
Definition: vlc_media_library.h:86
Definition: vlc_media_library.h:491
An entry point reload operation started.
Definition: vlc_media_library.h:575
Definition: vlc_media_library.h:56
Definition: vlc_media_library.h:303