Coverage Report

Created: 2023-06-07 07:26

/src/vlc/include/vlc_renderer_discovery.h
Line
Count
Source (jump to first uncovered line)
1
/*****************************************************************************
2
 * vlc_renderer_discovery.h : Renderer Discovery functions
3
 *****************************************************************************
4
 * Copyright (C) 2016 VLC authors and VideoLAN
5
 *
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.
10
 *
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.
15
 *
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
 *****************************************************************************/
20
21
#ifndef VLC_RENDERER_DISCOVERY_H
22
#define VLC_RENDERER_DISCOVERY_H 1
23
24
#include <vlc_input.h>
25
#include <vlc_probe.h>
26
#include <vlc_url.h>
27
28
/**
29
 * @defgroup vlc_renderer VLC renderer discovery
30
 * @ingroup interface
31
 * @{
32
 *
33
 * @file
34
 * This file declares VLC renderer discvoery structures and functions
35
 *
36
 * @defgroup vlc_renderer_item VLC renderer items returned by the discovery
37
 * @{
38
 */
39
40
#define VLC_RENDERER_CAN_AUDIO 0x0001
41
#define VLC_RENDERER_CAN_VIDEO 0x0002
42
43
/**
44
 * Create a new renderer item
45
 *
46
 * @param psz_type type of the item
47
 * @param psz_name name of the item
48
 * @param psz_uri uri of the renderer item, must contains a valid protocol and
49
 * a valid host
50
 * @param psz_extra_sout extra sout options
51
 * @param psz_demux_filter demux filter to use with the renderer
52
 * @param psz_icon_uri icon uri of the renderer item
53
 * @param i_flags flags for the item
54
 * @return a renderer item or NULL in case of error
55
 */
56
VLC_API vlc_renderer_item_t *
57
vlc_renderer_item_new(const char *psz_type, const char *psz_name,
58
                      const char *psz_uri, const char *psz_extra_sout,
59
                      const char *psz_demux_filter, const char *psz_icon_uri,
60
                      int i_flags) VLC_USED;
61
62
/**
63
 * Hold a renderer item, i.e. creates a new reference
64
 */
65
VLC_API vlc_renderer_item_t *
66
vlc_renderer_item_hold(vlc_renderer_item_t *p_item);
67
68
/**
69
 * Releases a renderer item, i.e. decrements its reference counter
70
 */
71
VLC_API void
72
vlc_renderer_item_release(vlc_renderer_item_t *p_item);
73
74
/**
75
 * Get the human readable name of a renderer item
76
 */
77
VLC_API const char *
78
vlc_renderer_item_name(const vlc_renderer_item_t *p_item);
79
80
/**
81
 * Get the type (not translated) of a renderer item. For now, the type can only
82
 * be "chromecast" ("upnp", "airplay" may come later).
83
 */
84
VLC_API const char *
85
vlc_renderer_item_type(const vlc_renderer_item_t *p_item);
86
87
/**
88
 * Get the demux filter to use with a renderer item
89
 */
90
VLC_API const char *
91
vlc_renderer_item_demux_filter(const vlc_renderer_item_t *p_item);
92
93
/**
94
 * Get the sout command of a renderer item
95
 */
96
VLC_API const char *
97
vlc_renderer_item_sout(const vlc_renderer_item_t *p_item);
98
99
/**
100
 * Get the icon uri of a renderer item
101
 */
102
VLC_API const char *
103
vlc_renderer_item_icon_uri(const vlc_renderer_item_t *p_item);
104
105
/**
106
 * Get the flags of a renderer item
107
 */
108
VLC_API int
109
vlc_renderer_item_flags(const vlc_renderer_item_t *p_item);
110
111
/**
112
 * @}
113
 * @defgroup vlc_renderer_discovery VLC renderer discovery interface
114
 * @{
115
 */
116
117
struct vlc_renderer_discovery_owner;
118
119
/**
120
 * Return a list of renderer discovery modules
121
 *
122
 * @param pppsz_names a pointer to a list of module name, NULL terminated
123
 * @param pppsz_longnames a pointer to a list of module longname, NULL
124
 * terminated
125
 *
126
 * @return VLC_SUCCESS on success, or VLC_EGENERIC on error
127
 */
128
VLC_API int
129
vlc_rd_get_names(vlc_object_t *p_obj, char ***pppsz_names,
130
                 char ***pppsz_longnames) VLC_USED;
131
#define vlc_rd_get_names(a, b, c) \
132
        vlc_rd_get_names(VLC_OBJECT(a), b, c)
133
134
/**
135
 * Create a new renderer discovery module
136
 *
137
 * @param psz_name name of the module to load, see vlc_rd_get_names() to get
138
 * the list of names
139
 *
140
 * @return a valid vlc_renderer_discovery, need to be released with
141
 * vlc_rd_release()
142
 */
143
VLC_API vlc_renderer_discovery_t *
144
vlc_rd_new(vlc_object_t *p_obj, const char *psz_name,
145
           const struct vlc_renderer_discovery_owner *owner) VLC_USED;
146
147
VLC_API void vlc_rd_release(vlc_renderer_discovery_t *p_rd);
148
149
/**
150
 * @}
151
 * @defgroup vlc_renderer_discovery_module VLC renderer module
152
 * @{
153
 */
154
155
struct vlc_renderer_discovery_owner
156
{
157
    void *sys;
158
    void (*item_added)(struct vlc_renderer_discovery_t *,
159
                       struct vlc_renderer_item_t *);
160
    void (*item_removed)(struct vlc_renderer_discovery_t *,
161
                         struct vlc_renderer_item_t *);
162
};
163
164
struct vlc_renderer_discovery_t
165
{
166
    struct vlc_object_t obj;
167
    module_t *          p_module;
168
169
    struct vlc_renderer_discovery_owner owner;
170
171
    char *              psz_name;
172
    config_chain_t *    p_cfg;
173
174
    void *p_sys;
175
};
176
177
/**
178
 * Add a new renderer item
179
 *
180
 * This will send the vlc_RendererDiscoveryItemAdded event
181
 */
182
static inline void vlc_rd_add_item(vlc_renderer_discovery_t * p_rd,
183
                                   vlc_renderer_item_t * p_item)
184
0
{
185
0
    p_rd->owner.item_added(p_rd, p_item);
186
0
}
Unexecuted instantiation: input.c:vlc_rd_add_item
Unexecuted instantiation: player.c:vlc_rd_add_item
Unexecuted instantiation: renderer_discovery.c:vlc_rd_add_item
187
188
/**
189
 * Add a new renderer item
190
 *
191
 * This will send the vlc_RendererDiscoveryItemRemoved event
192
 */
193
static inline void vlc_rd_remove_item(vlc_renderer_discovery_t * p_rd,
194
                                      vlc_renderer_item_t * p_item)
195
0
{
196
0
    p_rd->owner.item_removed(p_rd, p_item);
197
0
}
Unexecuted instantiation: input.c:vlc_rd_remove_item
Unexecuted instantiation: player.c:vlc_rd_remove_item
Unexecuted instantiation: renderer_discovery.c:vlc_rd_remove_item
198
199
/**
200
 * Renderer Discovery probe helpers
201
 */
202
VLC_API int
203
vlc_rd_probe_add(vlc_probe_t *p_probe, const char *psz_name,
204
                 const char *psz_longname);
205
206
#define VLC_RD_PROBE_HELPER(name, longname) \
207
static int vlc_rd_probe_open(vlc_object_t *obj) \
208
{ \
209
    return vlc_rd_probe_add((struct vlc_probe_t *)obj, name, longname); \
210
}
211
212
#define VLC_RD_PROBE_SUBMODULE \
213
    add_submodule() \
214
        set_capability("renderer probe", 100) \
215
        set_callback(vlc_rd_probe_open)
216
217
/** @} */
218
/** @} */
219
220
#endif