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