1 /*****************************************************************************
2 * libvlc_renderer_discoverer.h: libvlc external API
3 *****************************************************************************
4 * Copyright © 2016 VLC authors and VideoLAN
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU Lesser General Public License as published by
8 * the Free Software Foundation; either version 2.1 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public License
17 * along with this program; if not, write to the Free Software Foundation,
18 * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
19 *****************************************************************************/
21 #ifndef VLC_LIBVLC_RENDERER_DISCOVERER_H
22 #define VLC_LIBVLC_RENDERER_DISCOVERER_H 1
29 * @defgroup libvlc_renderer_discoverer LibVLC renderer discoverer
31 * LibVLC renderer discoverer finds available renderers available on the local
35 * LibVLC renderer discoverer external API
38 typedef struct libvlc_renderer_discoverer_t libvlc_renderer_discoverer_t
;
41 * Renderer discoverer description
43 * \see libvlc_renderer_discoverer_list_get()
45 typedef struct libvlc_rd_description_t
49 } libvlc_rd_description_t
;
51 /** The renderer can render audio */
52 #define LIBVLC_RENDERER_CAN_AUDIO 0x0001
53 /** The renderer can render video */
54 #define LIBVLC_RENDERER_CAN_VIDEO 0x0002
59 * This struct is passed by a @ref libvlc_event_t when a new renderer is added
62 * An item is valid until the @ref libvlc_RendererDiscovererItemDeleted event
63 * is called with the same pointer.
65 * \see libvlc_renderer_discoverer_event_manager()
67 typedef struct libvlc_renderer_item_t libvlc_renderer_item_t
;
71 * Hold a renderer item, i.e. creates a new reference
73 * This functions need to called from the libvlc_RendererDiscovererItemAdded
74 * callback if the libvlc user wants to use this item after. (for display or
75 * for passing it to the mediaplayer for example).
77 * \version LibVLC 3.0.0 or later
79 * \return the current item
81 LIBVLC_API libvlc_renderer_item_t
*
82 libvlc_renderer_item_hold(libvlc_renderer_item_t
*p_item
);
85 * Releases a renderer item, i.e. decrements its reference counter
87 * \version LibVLC 3.0.0 or later
90 libvlc_renderer_item_release(libvlc_renderer_item_t
*p_item
);
93 * Get the human readable name of a renderer item
95 * \version LibVLC 3.0.0 or later
97 * \return the name of the item (can't be NULL, must *not* be freed)
99 LIBVLC_API
const char *
100 libvlc_renderer_item_name(const libvlc_renderer_item_t
*p_item
);
103 * Get the type (not translated) of a renderer item. For now, the type can only
104 * be "chromecast" ("upnp", "airplay" may come later).
106 * \version LibVLC 3.0.0 or later
108 * \return the type of the item (can't be NULL, must *not* be freed)
110 LIBVLC_API
const char *
111 libvlc_renderer_item_type(const libvlc_renderer_item_t
*p_item
);
114 * Get the icon uri of a renderer item
116 * \version LibVLC 3.0.0 or later
118 * \return the uri of the item's icon (can be NULL, must *not* be freed)
120 LIBVLC_API
const char *
121 libvlc_renderer_item_icon_uri(const libvlc_renderer_item_t
*p_item
);
124 * Get the flags of a renderer item
126 * \see LIBVLC_RENDERER_CAN_AUDIO
127 * \see LIBVLC_RENDERER_CAN_VIDEO
129 * \version LibVLC 3.0.0 or later
131 * \return bitwise flag: capabilities of the renderer, see
134 libvlc_renderer_item_flags(const libvlc_renderer_item_t
*p_item
);
137 * Create a renderer discoverer object by name
139 * After this object is created, you should attach to events in order to be
140 * notified of the discoverer events.
142 * You need to call libvlc_renderer_discoverer_start() in order to start the
145 * \see libvlc_renderer_discoverer_event_manager()
146 * \see libvlc_renderer_discoverer_start()
148 * \version LibVLC 3.0.0 or later
150 * \param p_inst libvlc instance
151 * \param psz_name service name; use libvlc_renderer_discoverer_list_get() to
152 * get a list of the discoverer names available in this libVLC instance
153 * \return media discover object or NULL in case of error
155 LIBVLC_API libvlc_renderer_discoverer_t
*
156 libvlc_renderer_discoverer_new( libvlc_instance_t
*p_inst
,
157 const char *psz_name
);
160 * Release a renderer discoverer object
162 * \version LibVLC 3.0.0 or later
164 * \param p_rd renderer discoverer object
167 libvlc_renderer_discoverer_release( libvlc_renderer_discoverer_t
*p_rd
);
170 * Start renderer discovery
172 * To stop it, call libvlc_renderer_discoverer_stop() or
173 * libvlc_renderer_discoverer_release() directly.
175 * \see libvlc_renderer_discoverer_stop()
177 * \version LibVLC 3.0.0 or later
179 * \param p_rd renderer discoverer object
180 * \return -1 in case of error, 0 otherwise
183 libvlc_renderer_discoverer_start( libvlc_renderer_discoverer_t
*p_rd
);
186 * Stop renderer discovery.
188 * \see libvlc_renderer_discoverer_start()
190 * \version LibVLC 3.0.0 or later
192 * \param p_rd renderer discoverer object
195 libvlc_renderer_discoverer_stop( libvlc_renderer_discoverer_t
*p_rd
);
198 * Get the event manager of the renderer discoverer
200 * The possible events to attach are @ref libvlc_RendererDiscovererItemAdded
201 * and @ref libvlc_RendererDiscovererItemDeleted.
203 * The @ref libvlc_renderer_item_t struct passed to event callbacks is owned by
204 * VLC, users should take care of holding/releasing this struct for their
207 * \see libvlc_event_t.u.renderer_discoverer_item_added.item
208 * \see libvlc_event_t.u.renderer_discoverer_item_removed.item
210 * \version LibVLC 3.0.0 or later
212 * \return a valid event manager (can't fail)
214 LIBVLC_API libvlc_event_manager_t
*
215 libvlc_renderer_discoverer_event_manager( libvlc_renderer_discoverer_t
*p_rd
);
218 * Get media discoverer services
220 * \see libvlc_renderer_list_release()
222 * \version LibVLC 3.0.0 and later
224 * \param p_inst libvlc instance
225 * \param ppp_services address to store an allocated array of renderer
226 * discoverer services (must be freed with libvlc_renderer_list_release() by
229 * \return the number of media discoverer services (0 on error)
232 libvlc_renderer_discoverer_list_get( libvlc_instance_t
*p_inst
,
233 libvlc_rd_description_t
***ppp_services
);
236 * Release an array of media discoverer services
238 * \see libvlc_renderer_discoverer_list_get()
240 * \version LibVLC 3.0.0 and later
242 * \param pp_services array to release
243 * \param i_count number of elements in the array
246 libvlc_renderer_discoverer_list_release( libvlc_rd_description_t
**pp_services
,