VLC 4.0.0-dev
Loading...
Searching...
No Matches
es_out.h
Go to the documentation of this file.
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
33
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
44{
45 /* set/get mode */
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 transient demux rebuffering state */
83 ES_OUT_PRIV_SET_REBUFFER_STATE, /* arg1=bool b_rebuffering arg2=vlc_tick_t res=cannot fail */
84
85 /* Set rate */
86 ES_OUT_PRIV_SET_RATE, /* arg1=double source_rate arg2=double rate res=can fail */
87
88 /* RESET_PCR coming from decoders, when searching for a previous frame */
89 ES_OUT_PRIV_RESET_PCR_FRAME_PREV, /* arg1=vlc_tick_t buffering_duration, res=cannot fail */
90
91 /* Set next frame */
92 ES_OUT_PRIV_SET_FRAME_NEXT, /* res=can fail */
93
94 /* Set previous frame */
96
97 /* Set position/time/length */
98 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 */
99
100 /* Set jitter */
101 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 */
102
103 /* Get forced group */
104 ES_OUT_PRIV_GET_GROUP_FORCED, /* arg1=int * res=cannot fail */
105
106 /* Set End Of Stream */
107 ES_OUT_PRIV_SET_EOS, /* res=cannot fail */
108
109 /* Set a VBI/Teletext page */
110 ES_OUT_PRIV_SET_VBI_PAGE, /* arg1=unsigned res=can fail */
111
112 /* Set VBI/Teletext menu transparent */
113 ES_OUT_PRIV_SET_VBI_TRANSPARENCY /* arg1=bool res=can fail */
114};
115
116struct vlc_input_es_out;
119 struct vlc_input_es_out *out,
120 input_source_t *source,
121 int query,
122 va_list args);
123};
124
130
131static inline int
132es_out_vaPrivControl(struct vlc_input_es_out *out, int query, va_list args )
133{
134 return out->ops->priv_control(out, NULL, query, args);
135}
136
137static inline int
138es_out_PrivControl(struct vlc_input_es_out *out, int query, ...)
139{
140 va_list args;
141 va_start( args, query );
142 int result = es_out_vaPrivControl( out, query, args );
143 va_end( args );
144 return result;
145}
146
147static inline void
148es_out_SetMode(struct vlc_input_es_out *out, int i_mode)
149{
150 int i_ret = es_out_PrivControl(out, ES_OUT_PRIV_SET_MODE, i_mode);
151 assert( !i_ret );
152}
153
154static inline int
156{
157 return es_out_PrivControl(out, ES_OUT_PRIV_SET_ES, id);
158}
159
160static inline int
165
166static inline int
171
172static inline vlc_tick_t
174{
175 vlc_tick_t i_wu;
176 int i_ret = es_out_PrivControl(out, ES_OUT_PRIV_GET_WAKE_UP, &i_wu);
177
178 assert( !i_ret );
179 return i_wu;
180}
181
182static inline int
184 enum es_format_category_e cat,
185 vlc_es_id_t **ids)
186{
187 return es_out_PrivControl(out, ES_OUT_PRIV_SET_ES_LIST, cat, ids);
188}
189
190static inline void
192 enum es_format_category_e cat,
193 const char *str_ids)
194{
196 cat, str_ids);
197 assert( ret == VLC_SUCCESS );
198}
199
200static inline int
202 vlc_es_id_t ***context)
203{
204 return es_out_PrivControl(out, ES_OUT_PRIV_STOP_ALL_ES, context);
205}
206
207static inline int
209{
210 return es_out_PrivControl(out, ES_OUT_PRIV_START_ALL_ES, context);
211}
212
213static inline bool
215{
216 bool b;
217 int i_ret = es_out_PrivControl(out, ES_OUT_PRIV_GET_BUFFERING, &b);
218
219 assert( !i_ret );
220 return b;
221}
222
223static inline bool
225{
226 bool b;
227 int i_ret = es_out_Control(&out->out, ES_OUT_IS_EMPTY, &b);
228
229 assert( !i_ret );
230 return b;
231}
232
233static inline void
235 vlc_es_id_t *es,
236 vlc_tick_t i_delay)
237{
238 int i_ret = es_out_PrivControl(out, ES_OUT_PRIV_SET_ES_DELAY, es, i_delay);
239 assert( !i_ret );
240}
241
242static inline void
244 int i_cat,
245 vlc_tick_t i_delay)
246{
247 int i_ret = es_out_PrivControl(out, ES_OUT_PRIV_SET_DELAY, i_cat, i_delay);
248 assert( !i_ret );
249}
250
251static inline int
253 bool b_record,
254 const char *dir_path)
255{
256 return es_out_PrivControl(out, ES_OUT_PRIV_SET_RECORD_STATE, b_record, dir_path);
257}
258
259static inline int
261 bool b_source_paused,
262 bool b_paused,
263 vlc_tick_t i_date)
264{
265 return es_out_PrivControl(out, ES_OUT_PRIV_SET_PAUSE_STATE, b_source_paused, b_paused, i_date);
266}
267
268static inline void
269es_out_SetRebufferState(struct vlc_input_es_out *out, bool b_rebuffering)
270{
271 int i_ret = es_out_PrivControl(out, ES_OUT_PRIV_SET_REBUFFER_STATE, b_rebuffering, vlc_tick_now());
272 assert( !i_ret );
273}
274
275static inline int
276es_out_SetRate(struct vlc_input_es_out *out, float source_rate, float rate)
277{
278 return es_out_PrivControl(out, ES_OUT_PRIV_SET_RATE, source_rate, rate);
279}
280
281static inline int
286
287static inline int es_out_SetFramePrevious(struct vlc_input_es_out *out)
288{
290}
291
292static inline void
293es_out_SetTimes(struct vlc_input_es_out *out, double f_position,
294 vlc_tick_t i_time, vlc_tick_t i_normal_time,
295 vlc_tick_t i_length, bool b_live )
296{
297 int i_ret = es_out_PrivControl(out, ES_OUT_PRIV_SET_TIMES, f_position, i_time,
298 i_normal_time, i_length, b_live);
299 assert( !i_ret );
300}
301
302static inline void
304 vlc_tick_t i_pts_delay, vlc_tick_t i_pts_jitter,
305 int i_cr_average)
306{
308 i_pts_delay, i_pts_jitter, i_cr_average);
309 assert( !i_ret );
310}
311
312static inline int
314{
315 int i_group;
316 int i_ret = es_out_PrivControl(out, ES_OUT_PRIV_GET_GROUP_FORCED, &i_group);
317 assert( !i_ret );
318 return i_group;
319}
320
321static inline void
323{
324 int i_ret = es_out_PrivControl(out, ES_OUT_PRIV_SET_EOS);
325 assert( !i_ret );
326}
327
328static inline int
330 unsigned page)
331{
332 return es_out_PrivControl(out, ES_OUT_PRIV_SET_VBI_PAGE, id, page);
333}
334
335static inline int
337 bool enabled)
338{
340 enabled);
341}
342
343struct vlc_input_es_out *
344input_EsOutNew(input_thread_t *, input_source_t *main_source, float rate,
346
347struct vlc_input_es_out *
349
350struct vlc_input_es_out *
352
355
356static inline void
361
362#endif
static int es_out_GetGroupForced(struct vlc_input_es_out *out)
Definition es_out.h:313
static void es_out_SetRebufferState(struct vlc_input_es_out *out, bool b_rebuffering)
Definition es_out.h:269
es_out_query_private_e
Definition es_out.h:44
@ ES_OUT_PRIV_SET_REBUFFER_STATE
Definition es_out.h:83
@ ES_OUT_PRIV_SET_FRAME_NEXT
Definition es_out.h:92
@ ES_OUT_PRIV_GET_GROUP_FORCED
Definition es_out.h:104
@ ES_OUT_PRIV_SET_RATE
Definition es_out.h:86
@ ES_OUT_PRIV_SET_DELAY
Definition es_out.h:74
@ ES_OUT_PRIV_RESET_PCR_FRAME_PREV
Definition es_out.h:89
@ ES_OUT_PRIV_SET_VBI_PAGE
Definition es_out.h:110
@ ES_OUT_PRIV_SET_ES_CAT_IDS
Definition es_out.h:59
@ ES_OUT_PRIV_STOP_ALL_ES
Definition es_out.h:63
@ ES_OUT_PRIV_RESTART_ES
Definition es_out.h:51
@ ES_OUT_PRIV_GET_BUFFERING
Definition es_out.h:68
@ ES_OUT_PRIV_START_ALL_ES
Definition es_out.h:65
@ ES_OUT_PRIV_SET_ES_DELAY
Definition es_out.h:71
@ ES_OUT_PRIV_SET_ES
Definition es_out.h:49
@ ES_OUT_PRIV_SET_ES_LIST
Definition es_out.h:57
@ ES_OUT_PRIV_SET_PAUSE_STATE
Definition es_out.h:80
@ ES_OUT_PRIV_SET_VBI_TRANSPARENCY
Definition es_out.h:113
@ ES_OUT_PRIV_SET_FRAME_PREVIOUS
Definition es_out.h:95
@ ES_OUT_PRIV_SET_EOS
Definition es_out.h:107
@ ES_OUT_PRIV_SET_JITTER
Definition es_out.h:101
@ ES_OUT_PRIV_SET_RECORD_STATE
Definition es_out.h:77
@ ES_OUT_PRIV_SET_TIMES
Definition es_out.h:98
@ ES_OUT_PRIV_GET_WAKE_UP
Definition es_out.h:54
@ ES_OUT_PRIV_SET_MODE
Definition es_out.h:46
@ ES_OUT_PRIV_UNSET_ES
Definition es_out.h:50
static int es_out_SetVbiTransparency(struct vlc_input_es_out *out, vlc_es_id_t *id, bool enabled)
Definition es_out.h:336
static void es_out_SetJitter(struct vlc_input_es_out *out, vlc_tick_t i_pts_delay, vlc_tick_t i_pts_jitter, int i_cr_average)
Definition es_out.h:303
static int es_out_SetEs(struct vlc_input_es_out *out, vlc_es_id_t *id)
Definition es_out.h:155
static int es_out_StopAllEs(struct vlc_input_es_out *out, vlc_es_id_t ***context)
Definition es_out.h:201
static int es_out_SetRate(struct vlc_input_es_out *out, float source_rate, float rate)
Definition es_out.h:276
static int es_out_SetPauseState(struct vlc_input_es_out *out, bool b_source_paused, bool b_paused, vlc_tick_t i_date)
Definition es_out.h:260
const input_source_t * vlc_es_id_GetSource(vlc_es_id_t *id)
Definition es_out.c:5012
static void es_out_SetMode(struct vlc_input_es_out *out, int i_mode)
Definition es_out.h:148
static int es_out_SetFramePrevious(struct vlc_input_es_out *out)
Definition es_out.h:287
static void es_out_SetDelay(struct vlc_input_es_out *out, int i_cat, vlc_tick_t i_delay)
Definition es_out.h:243
static int es_out_vaPrivControl(struct vlc_input_es_out *out, int query, va_list args)
Definition es_out.h:132
static bool es_out_GetBuffering(struct vlc_input_es_out *out)
Definition es_out.h:214
static void vlc_input_es_out_Delete(struct vlc_input_es_out *out)
Definition es_out.h:357
static void es_out_SetEsDelay(struct vlc_input_es_out *out, vlc_es_id_t *es, vlc_tick_t i_delay)
Definition es_out.h:234
static bool es_out_IsEmpty(struct vlc_input_es_out *out)
Definition es_out.h:224
struct vlc_input_es_out * input_EsOutNew(input_thread_t *, input_source_t *main_source, float rate, enum input_type input_type)
Definition es_out.c:4363
struct vlc_input_es_out * input_EsOutTimeshiftNew(input_thread_t *, struct vlc_input_es_out *, float i_rate)
Definition es_out_timeshift.c:878
static int es_out_SetFrameNext(struct vlc_input_es_out *out)
Definition es_out.h:282
static void es_out_Eos(struct vlc_input_es_out *out)
Definition es_out.h:322
static int es_out_SetEsList(struct vlc_input_es_out *out, enum es_format_category_e cat, vlc_es_id_t **ids)
Definition es_out.h:183
static int es_out_RestartEs(struct vlc_input_es_out *out, vlc_es_id_t *id)
Definition es_out.h:167
static int es_out_StartAllEs(struct vlc_input_es_out *out, vlc_es_id_t **context)
Definition es_out.h:208
es_out_mode_e
Definition es_out.h:35
@ ES_OUT_MODE_NONE
Definition es_out.h:36
@ ES_OUT_MODE_ALL
Definition es_out.h:37
@ ES_OUT_MODE_END
Definition es_out.h:40
@ ES_OUT_MODE_AUTO
Definition es_out.h:38
@ ES_OUT_MODE_PARTIAL
Definition es_out.h:39
static int es_out_PrivControl(struct vlc_input_es_out *out, int query,...)
Definition es_out.h:138
static vlc_tick_t es_out_GetWakeup(struct vlc_input_es_out *out)
Definition es_out.h:173
es_out_id_t * vlc_es_id_get_out(vlc_es_id_t *id)
Definition es_out.c:4970
static int es_out_SetRecordState(struct vlc_input_es_out *out, bool b_record, const char *dir_path)
Definition es_out.h:252
static void es_out_SetTimes(struct vlc_input_es_out *out, double f_position, vlc_tick_t i_time, vlc_tick_t i_normal_time, vlc_tick_t i_length, bool b_live)
Definition es_out.h:293
static void es_out_SetEsCatIds(struct vlc_input_es_out *out, enum es_format_category_e cat, const char *str_ids)
Definition es_out.h:191
static int es_out_SetVbiPage(struct vlc_input_es_out *out, vlc_es_id_t *id, unsigned page)
Definition es_out.h:329
static int es_out_UnsetEs(struct vlc_input_es_out *out, vlc_es_id_t *id)
Definition es_out.h:161
struct vlc_input_es_out * input_EsOutSourceNew(struct vlc_input_es_out *master_out, input_source_t *in)
Definition es_out_source.c:97
#define VLC_SUCCESS
No error.
Definition vlc_common.h:480
static int es_out_Control(es_out_t *out, int i_query,...)
Definition vlc_es_out.h:168
static void es_out_Delete(es_out_t *p_out)
Definition vlc_es_out.h:179
@ ES_OUT_PRIVATE_START
Definition vlc_es_out.h:120
@ ES_OUT_IS_EMPTY
Definition vlc_es_out.h:97
vlc_tick_t vlc_tick_now(void)
Precision monotonic clock.
Definition thread.c:253
input_type
Definition input_internal.h:52
Definition es_out.c:114
Definition vlc_es_out.h:142
Definition source.h:35
Main structure representing an input thread.
Definition input_internal.h:44
Opaque structure representing an ES (Elementary Stream) track.
Definition es_out.c:103
Definition es_out.h:117
int(* priv_control)(struct vlc_input_es_out *out, input_source_t *source, int query, va_list args)
Definition es_out.h:118
Definition es_out.h:125
es_out_t out
Definition es_out.h:126
const struct vlc_input_es_out_ops * ops
Definition es_out.h:128
This file is a collection of common definitions and types.
es_format_category_e
ES Categories.
Definition vlc_es.h:600
Elementary streams output interface.
int64_t vlc_tick_t
High precision date or time interval.
Definition vlc_tick.h:48