Coverage Report

Created: 2026-07-12 08:57

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/vlc/src/input/es_out.h
Line
Count
Source
1
/*****************************************************************************
2
 * es_out.h: Input es_out functions
3
 *****************************************************************************
4
 * Copyright (C) 1998-2008 VLC authors and VideoLAN
5
 * Copyright (C) 2008 Laurent Aimar
6
 *
7
 * Authors: Laurent Aimar <fenrir@via.ecp.fr>
8
 *
9
 * This program is free software; you can redistribute it and/or modify it
10
 * under the terms of the GNU Lesser General Public License as published by
11
 * the Free Software Foundation; either version 2.1 of the License, or
12
 * (at your option) any later version.
13
 *
14
 * This program is distributed in the hope that it will be useful,
15
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17
 * GNU Lesser General Public License for more details.
18
 *
19
 * You should have received a copy of the GNU Lesser General Public License
20
 * along with this program; if not, write to the Free Software Foundation,
21
 * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
22
 *****************************************************************************/
23
24
#ifndef LIBVLC_INPUT_ES_OUT_H
25
#define LIBVLC_INPUT_ES_OUT_H 1
26
27
#include <vlc_common.h>
28
#include <vlc_es_out.h>
29
30
#include "input_internal.h"
31
32
typedef struct input_thread_t input_thread_t;
33
34
enum es_out_mode_e
35
{
36
    ES_OUT_MODE_NONE,   /* don't select anything */
37
    ES_OUT_MODE_ALL,    /* eg for stream output */
38
    ES_OUT_MODE_AUTO,   /* best audio/video or for input follow audio-track, sub-track */
39
    ES_OUT_MODE_PARTIAL,/* select programs given after --programs */
40
    ES_OUT_MODE_END     /* mark the es_out as dead */
41
};
42
43
enum es_out_query_private_e
44
{
45
    /* set/get mode */
46
    ES_OUT_PRIV_SET_MODE = ES_OUT_PRIVATE_START, /* arg1= int */
47
48
    /* Same than ES_OUT_SET_ES/ES_OUT_UNSET_ES/ES_OUT_RESTART_ES, but with vlc_es_id_t * */
49
    ES_OUT_PRIV_SET_ES,      /* arg1= vlc_es_id_t*                   */
50
    ES_OUT_PRIV_UNSET_ES,    /* arg1= vlc_es_id_t* res=can fail      */
51
    ES_OUT_PRIV_RESTART_ES,  /* arg1= vlc_es_id_t*                   */
52
53
    /* Get date to wait before demuxing more data */
54
    ES_OUT_PRIV_GET_WAKE_UP,                        /* arg1=vlc_tick_t*            res=cannot fail */
55
56
    /* Select a list of ES */
57
    ES_OUT_PRIV_SET_ES_LIST, /* arg1= vlc_es_id_t *const* (null terminated array) */
58
59
    ES_OUT_PRIV_SET_ES_CAT_IDS, /* arg1=es_format_category_e arg2=const char *, res=cannot fail */
60
61
    /* Stop all selected ES and save the stopped state in a context.
62
     * Call ES_OUT_PRIV_START_ALL_ES to release the context. */
63
    ES_OUT_PRIV_STOP_ALL_ES,                        /* arg1=vlc_es_id_t *** */
64
    /* Start all ES from the context returned by ES_OUT_PRIV_STOP_ALL_ES */
65
    ES_OUT_PRIV_START_ALL_ES,                       /* arg1=vlc_es_id_t ** */
66
67
    /* Get buffering state */
68
    ES_OUT_PRIV_GET_BUFFERING,                      /* arg1=bool*               res=cannot fail */
69
70
    /* Set delay for an ES identifier */
71
    ES_OUT_PRIV_SET_ES_DELAY,                       /* arg1=vlc_es_id_t *, res=cannot fail */
72
73
    /* Set delay for a ES category */
74
    ES_OUT_PRIV_SET_DELAY,                          /* arg1=es_category_e,      res=cannot fail */
75
76
    /* Set record state */
77
    ES_OUT_PRIV_SET_RECORD_STATE,                        /* arg1=bool                res=can fail */
78
79
    /* Set pause state */
80
    ES_OUT_PRIV_SET_PAUSE_STATE,                    /* arg1=bool b_source_paused, bool b_paused arg2=vlc_tick_t res=can fail */
81
82
    /* Set rate */
83
    ES_OUT_PRIV_SET_RATE,                           /* arg1=double source_rate arg2=double rate res=can fail */
84
85
    /* RESET_PCR coming from decoders, when searching for a previous frame */
86
    ES_OUT_PRIV_RESET_PCR_FRAME_PREV,               /* arg1=vlc_tick_t buffering_duration, res=cannot fail */
87
88
    /* Set next frame */
89
    ES_OUT_PRIV_SET_FRAME_NEXT,                     /*                          res=can fail */
90
91
    /* Set previous frame */
92
    ES_OUT_PRIV_SET_FRAME_PREVIOUS,                     /*                          res=can fail */
93
94
    /* Set position/time/length */
95
    ES_OUT_PRIV_SET_TIMES,                          /* arg1=double f_position arg2=vlc_tick_t i_time arg3=vlc_tick_t i_normal_time arg4=vlc_tick_t i_length arg5 int b_live res=cannot fail */
96
97
    /* Set jitter */
98
    ES_OUT_PRIV_SET_JITTER,                         /* arg1=vlc_tick_t i_pts_delay arg2= vlc_tick_t i_pts_jitter, arg2=int i_cr_average res=cannot fail */
99
100
    /* Get forced group */
101
    ES_OUT_PRIV_GET_GROUP_FORCED,                   /* arg1=int * res=cannot fail */
102
103
    /* Set End Of Stream */
104
    ES_OUT_PRIV_SET_EOS,                            /* res=cannot fail */
105
106
    /* Set a VBI/Teletext page */
107
    ES_OUT_PRIV_SET_VBI_PAGE,                       /* arg1=unsigned res=can fail */
108
109
    /* Set VBI/Teletext menu transparent */
110
    ES_OUT_PRIV_SET_VBI_TRANSPARENCY                /* arg1=bool res=can fail */
111
};
112
113
struct vlc_input_es_out;
114
struct vlc_input_es_out_ops {
115
    int (*priv_control)(
116
        struct vlc_input_es_out *out,
117
        input_source_t *source,
118
        int query,
119
        va_list args);
120
};
121
122
struct vlc_input_es_out {
123
    es_out_t out;
124
125
    const struct vlc_input_es_out_ops *ops;
126
};
127
128
static inline int
129
es_out_vaPrivControl(struct vlc_input_es_out *out, int query, va_list args )
130
0
{
131
0
    return out->ops->priv_control(out, NULL, query, args);
132
0
}
Unexecuted instantiation: input.c:es_out_vaPrivControl
Unexecuted instantiation: es_out.c:es_out_vaPrivControl
Unexecuted instantiation: es_out_source.c:es_out_vaPrivControl
Unexecuted instantiation: es_out_timeshift.c:es_out_vaPrivControl
133
134
static inline int
135
es_out_PrivControl(struct vlc_input_es_out *out, int query, ...)
136
0
{
137
0
    va_list args;
138
0
    va_start( args, query );
139
0
    int result = es_out_vaPrivControl( out, query, args );
140
0
    va_end( args );
141
0
    return result;
142
0
}
Unexecuted instantiation: input.c:es_out_PrivControl
Unexecuted instantiation: es_out.c:es_out_PrivControl
Unexecuted instantiation: es_out_source.c:es_out_PrivControl
Unexecuted instantiation: es_out_timeshift.c:es_out_PrivControl
143
144
static inline void
145
es_out_SetMode(struct vlc_input_es_out *out, int i_mode)
146
0
{
147
0
    int i_ret = es_out_PrivControl(out, ES_OUT_PRIV_SET_MODE, i_mode);
148
0
    assert( !i_ret );
149
0
}
Unexecuted instantiation: input.c:es_out_SetMode
Unexecuted instantiation: es_out.c:es_out_SetMode
Unexecuted instantiation: es_out_source.c:es_out_SetMode
Unexecuted instantiation: es_out_timeshift.c:es_out_SetMode
150
151
static inline int
152
es_out_SetEs(struct vlc_input_es_out *out, vlc_es_id_t *id)
153
0
{
154
0
    return es_out_PrivControl(out, ES_OUT_PRIV_SET_ES, id);
155
0
}
Unexecuted instantiation: input.c:es_out_SetEs
Unexecuted instantiation: es_out.c:es_out_SetEs
Unexecuted instantiation: es_out_source.c:es_out_SetEs
Unexecuted instantiation: es_out_timeshift.c:es_out_SetEs
156
157
static inline int
158
es_out_UnsetEs(struct vlc_input_es_out *out, vlc_es_id_t *id)
159
0
{
160
0
    return es_out_PrivControl(out, ES_OUT_PRIV_UNSET_ES, id);
161
0
}
Unexecuted instantiation: input.c:es_out_UnsetEs
Unexecuted instantiation: es_out.c:es_out_UnsetEs
Unexecuted instantiation: es_out_source.c:es_out_UnsetEs
Unexecuted instantiation: es_out_timeshift.c:es_out_UnsetEs
162
163
static inline int
164
es_out_RestartEs(struct vlc_input_es_out *out, vlc_es_id_t *id)
165
0
{
166
0
    return es_out_PrivControl(out, ES_OUT_PRIV_RESTART_ES, id);
167
0
}
Unexecuted instantiation: input.c:es_out_RestartEs
Unexecuted instantiation: es_out.c:es_out_RestartEs
Unexecuted instantiation: es_out_source.c:es_out_RestartEs
Unexecuted instantiation: es_out_timeshift.c:es_out_RestartEs
168
169
static inline vlc_tick_t
170
es_out_GetWakeup(struct vlc_input_es_out *out)
171
0
{
172
0
    vlc_tick_t i_wu;
173
0
    int i_ret = es_out_PrivControl(out, ES_OUT_PRIV_GET_WAKE_UP, &i_wu);
174
175
0
    assert( !i_ret );
176
0
    return i_wu;
177
0
}
Unexecuted instantiation: input.c:es_out_GetWakeup
Unexecuted instantiation: es_out.c:es_out_GetWakeup
Unexecuted instantiation: es_out_source.c:es_out_GetWakeup
Unexecuted instantiation: es_out_timeshift.c:es_out_GetWakeup
178
179
static inline int
180
es_out_SetEsList(struct vlc_input_es_out *out,
181
                 enum es_format_category_e cat,
182
                 vlc_es_id_t **ids)
183
0
{
184
0
    return es_out_PrivControl(out, ES_OUT_PRIV_SET_ES_LIST, cat, ids);
185
0
}
Unexecuted instantiation: input.c:es_out_SetEsList
Unexecuted instantiation: es_out.c:es_out_SetEsList
Unexecuted instantiation: es_out_source.c:es_out_SetEsList
Unexecuted instantiation: es_out_timeshift.c:es_out_SetEsList
186
187
static inline void
188
es_out_SetEsCatIds(struct vlc_input_es_out *out,
189
                   enum es_format_category_e cat,
190
                   const char *str_ids)
191
0
{
192
0
    int ret = es_out_PrivControl(out, ES_OUT_PRIV_SET_ES_CAT_IDS,
193
0
                                 cat, str_ids);
194
0
    assert( ret == VLC_SUCCESS );
195
0
}
Unexecuted instantiation: input.c:es_out_SetEsCatIds
Unexecuted instantiation: es_out.c:es_out_SetEsCatIds
Unexecuted instantiation: es_out_source.c:es_out_SetEsCatIds
Unexecuted instantiation: es_out_timeshift.c:es_out_SetEsCatIds
196
197
static inline int
198
es_out_StopAllEs(struct vlc_input_es_out *out,
199
                 vlc_es_id_t ***context)
200
0
{
201
0
    return es_out_PrivControl(out, ES_OUT_PRIV_STOP_ALL_ES, context);
202
0
}
Unexecuted instantiation: input.c:es_out_StopAllEs
Unexecuted instantiation: es_out.c:es_out_StopAllEs
Unexecuted instantiation: es_out_source.c:es_out_StopAllEs
Unexecuted instantiation: es_out_timeshift.c:es_out_StopAllEs
203
204
static inline int
205
es_out_StartAllEs(struct vlc_input_es_out *out, vlc_es_id_t **context )
206
0
{
207
0
    return es_out_PrivControl(out, ES_OUT_PRIV_START_ALL_ES, context);
208
0
}
Unexecuted instantiation: input.c:es_out_StartAllEs
Unexecuted instantiation: es_out.c:es_out_StartAllEs
Unexecuted instantiation: es_out_source.c:es_out_StartAllEs
Unexecuted instantiation: es_out_timeshift.c:es_out_StartAllEs
209
210
static inline bool
211
es_out_GetBuffering(struct vlc_input_es_out *out)
212
0
{
213
0
    bool b;
214
0
    int i_ret = es_out_PrivControl(out, ES_OUT_PRIV_GET_BUFFERING, &b);
215
216
0
    assert( !i_ret );
217
0
    return b;
218
0
}
Unexecuted instantiation: input.c:es_out_GetBuffering
Unexecuted instantiation: es_out.c:es_out_GetBuffering
Unexecuted instantiation: es_out_source.c:es_out_GetBuffering
Unexecuted instantiation: es_out_timeshift.c:es_out_GetBuffering
219
220
static inline bool
221
es_out_IsEmpty(struct vlc_input_es_out *out)
222
0
{
223
0
    bool b;
224
0
    int i_ret = es_out_Control(&out->out, ES_OUT_IS_EMPTY, &b);
225
226
0
    assert( !i_ret );
227
0
    return b;
228
0
}
Unexecuted instantiation: input.c:es_out_IsEmpty
Unexecuted instantiation: es_out.c:es_out_IsEmpty
Unexecuted instantiation: es_out_source.c:es_out_IsEmpty
Unexecuted instantiation: es_out_timeshift.c:es_out_IsEmpty
229
230
static inline void
231
es_out_SetEsDelay(struct vlc_input_es_out *out,
232
                  vlc_es_id_t *es,
233
                  vlc_tick_t i_delay)
234
0
{
235
0
    int i_ret = es_out_PrivControl(out, ES_OUT_PRIV_SET_ES_DELAY, es, i_delay);
236
0
    assert( !i_ret );
237
0
}
Unexecuted instantiation: input.c:es_out_SetEsDelay
Unexecuted instantiation: es_out.c:es_out_SetEsDelay
Unexecuted instantiation: es_out_source.c:es_out_SetEsDelay
Unexecuted instantiation: es_out_timeshift.c:es_out_SetEsDelay
238
239
static inline void
240
es_out_SetDelay(struct vlc_input_es_out *out,
241
                int i_cat,
242
                vlc_tick_t i_delay)
243
0
{
244
0
    int i_ret = es_out_PrivControl(out, ES_OUT_PRIV_SET_DELAY, i_cat, i_delay);
245
0
    assert( !i_ret );
246
0
}
Unexecuted instantiation: input.c:es_out_SetDelay
Unexecuted instantiation: es_out.c:es_out_SetDelay
Unexecuted instantiation: es_out_source.c:es_out_SetDelay
Unexecuted instantiation: es_out_timeshift.c:es_out_SetDelay
247
248
static inline int
249
es_out_SetRecordState(struct vlc_input_es_out *out,
250
                      bool b_record,
251
                      const char *dir_path)
252
0
{
253
0
    return es_out_PrivControl(out, ES_OUT_PRIV_SET_RECORD_STATE, b_record, dir_path);
254
0
}
Unexecuted instantiation: input.c:es_out_SetRecordState
Unexecuted instantiation: es_out.c:es_out_SetRecordState
Unexecuted instantiation: es_out_source.c:es_out_SetRecordState
Unexecuted instantiation: es_out_timeshift.c:es_out_SetRecordState
255
256
static inline int
257
es_out_SetPauseState(struct vlc_input_es_out *out,
258
                     bool b_source_paused,
259
                     bool b_paused,
260
                     vlc_tick_t i_date)
261
0
{
262
0
    return es_out_PrivControl(out, ES_OUT_PRIV_SET_PAUSE_STATE, b_source_paused, b_paused, i_date);
263
0
}
Unexecuted instantiation: input.c:es_out_SetPauseState
Unexecuted instantiation: es_out.c:es_out_SetPauseState
Unexecuted instantiation: es_out_source.c:es_out_SetPauseState
Unexecuted instantiation: es_out_timeshift.c:es_out_SetPauseState
264
265
static inline int
266
es_out_SetRate(struct vlc_input_es_out *out, float source_rate, float rate)
267
0
{
268
0
    return es_out_PrivControl(out, ES_OUT_PRIV_SET_RATE, source_rate, rate);
269
0
}
Unexecuted instantiation: input.c:es_out_SetRate
Unexecuted instantiation: es_out.c:es_out_SetRate
Unexecuted instantiation: es_out_source.c:es_out_SetRate
Unexecuted instantiation: es_out_timeshift.c:es_out_SetRate
270
271
static inline int
272
es_out_SetFrameNext(struct vlc_input_es_out *out )
273
0
{
274
0
    return es_out_PrivControl(out, ES_OUT_PRIV_SET_FRAME_NEXT);
275
0
}
Unexecuted instantiation: input.c:es_out_SetFrameNext
Unexecuted instantiation: es_out.c:es_out_SetFrameNext
Unexecuted instantiation: es_out_source.c:es_out_SetFrameNext
Unexecuted instantiation: es_out_timeshift.c:es_out_SetFrameNext
276
277
static inline int es_out_SetFramePrevious(struct vlc_input_es_out *out)
278
0
{
279
0
    return es_out_PrivControl(out, ES_OUT_PRIV_SET_FRAME_PREVIOUS);
280
0
}
Unexecuted instantiation: input.c:es_out_SetFramePrevious
Unexecuted instantiation: es_out.c:es_out_SetFramePrevious
Unexecuted instantiation: es_out_source.c:es_out_SetFramePrevious
Unexecuted instantiation: es_out_timeshift.c:es_out_SetFramePrevious
281
282
static inline void
283
es_out_SetTimes(struct vlc_input_es_out *out, double f_position,
284
                vlc_tick_t i_time, vlc_tick_t i_normal_time,
285
                vlc_tick_t i_length, bool b_live  )
286
0
{
287
0
    int i_ret = es_out_PrivControl(out, ES_OUT_PRIV_SET_TIMES, f_position, i_time,
288
0
                                   i_normal_time, i_length, b_live);
289
0
    assert( !i_ret );
290
0
}
Unexecuted instantiation: input.c:es_out_SetTimes
Unexecuted instantiation: es_out.c:es_out_SetTimes
Unexecuted instantiation: es_out_source.c:es_out_SetTimes
Unexecuted instantiation: es_out_timeshift.c:es_out_SetTimes
291
292
static inline void
293
es_out_SetJitter(struct vlc_input_es_out *out,
294
                 vlc_tick_t i_pts_delay, vlc_tick_t i_pts_jitter,
295
                 int i_cr_average)
296
0
{
297
0
    int i_ret = es_out_PrivControl(out, ES_OUT_PRIV_SET_JITTER,
298
0
                                   i_pts_delay, i_pts_jitter, i_cr_average);
299
0
    assert( !i_ret );
300
0
}
Unexecuted instantiation: input.c:es_out_SetJitter
Unexecuted instantiation: es_out.c:es_out_SetJitter
Unexecuted instantiation: es_out_source.c:es_out_SetJitter
Unexecuted instantiation: es_out_timeshift.c:es_out_SetJitter
301
302
static inline int
303
es_out_GetGroupForced(struct vlc_input_es_out *out)
304
0
{
305
0
    int i_group;
306
0
    int i_ret = es_out_PrivControl(out, ES_OUT_PRIV_GET_GROUP_FORCED, &i_group);
307
0
    assert( !i_ret );
308
0
    return i_group;
309
0
}
Unexecuted instantiation: input.c:es_out_GetGroupForced
Unexecuted instantiation: es_out.c:es_out_GetGroupForced
Unexecuted instantiation: es_out_source.c:es_out_GetGroupForced
Unexecuted instantiation: es_out_timeshift.c:es_out_GetGroupForced
310
311
static inline void
312
es_out_Eos(struct vlc_input_es_out *out)
313
0
{
314
0
    int i_ret = es_out_PrivControl(out, ES_OUT_PRIV_SET_EOS);
315
0
    assert( !i_ret );
316
0
}
Unexecuted instantiation: input.c:es_out_Eos
Unexecuted instantiation: es_out.c:es_out_Eos
Unexecuted instantiation: es_out_source.c:es_out_Eos
Unexecuted instantiation: es_out_timeshift.c:es_out_Eos
317
318
static inline int
319
es_out_SetVbiPage(struct vlc_input_es_out *out, vlc_es_id_t *id,
320
                  unsigned page)
321
0
{
322
0
    return es_out_PrivControl(out, ES_OUT_PRIV_SET_VBI_PAGE, id, page);
323
0
}
Unexecuted instantiation: input.c:es_out_SetVbiPage
Unexecuted instantiation: es_out.c:es_out_SetVbiPage
Unexecuted instantiation: es_out_source.c:es_out_SetVbiPage
Unexecuted instantiation: es_out_timeshift.c:es_out_SetVbiPage
324
325
static inline int
326
es_out_SetVbiTransparency(struct vlc_input_es_out *out, vlc_es_id_t *id,
327
                          bool enabled)
328
0
{
329
0
    return es_out_PrivControl(out, ES_OUT_PRIV_SET_VBI_TRANSPARENCY, id,
330
0
                              enabled);
331
0
}
Unexecuted instantiation: input.c:es_out_SetVbiTransparency
Unexecuted instantiation: es_out.c:es_out_SetVbiTransparency
Unexecuted instantiation: es_out_source.c:es_out_SetVbiTransparency
Unexecuted instantiation: es_out_timeshift.c:es_out_SetVbiTransparency
332
333
struct vlc_input_es_out *
334
input_EsOutNew(input_thread_t *, input_source_t *main_source, float rate,
335
               enum input_type input_type);
336
337
struct vlc_input_es_out *
338
input_EsOutTimeshiftNew(input_thread_t *, struct vlc_input_es_out *, float i_rate);
339
340
struct vlc_input_es_out *
341
input_EsOutSourceNew(struct vlc_input_es_out *master_out, input_source_t *in);
342
343
es_out_id_t *vlc_es_id_get_out(vlc_es_id_t *id);
344
const input_source_t *vlc_es_id_GetSource(vlc_es_id_t *id);
345
346
static inline void
347
vlc_input_es_out_Delete(struct vlc_input_es_out *out)
348
0
{
349
0
    es_out_Delete(&out->out);
350
0
}
Unexecuted instantiation: input.c:vlc_input_es_out_Delete
Unexecuted instantiation: es_out.c:vlc_input_es_out_Delete
Unexecuted instantiation: es_out_source.c:vlc_input_es_out_Delete
Unexecuted instantiation: es_out_timeshift.c:vlc_input_es_out_Delete
351
352
#endif