VLC 4.0.0-dev
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
30{
31 ES_OUT_MODE_NONE, /* don't select anything */
32 ES_OUT_MODE_ALL, /* eg for stream output */
33 ES_OUT_MODE_AUTO, /* best audio/video or for input follow audio-track, sub-track */
34 ES_OUT_MODE_PARTIAL,/* select programs given after --programs */
35 ES_OUT_MODE_END /* mark the es_out as dead */
36};
37
39{
40 /* set/get mode */
42
43 /* Same than ES_OUT_SET_ES/ES_OUT_UNSET_ES/ES_OUT_RESTART_ES, but with vlc_es_id_t * */
44 ES_OUT_PRIV_SET_ES, /* arg1= vlc_es_id_t* */
45 ES_OUT_PRIV_UNSET_ES, /* arg1= vlc_es_id_t* res=can fail */
46 ES_OUT_PRIV_RESTART_ES, /* arg1= vlc_es_id_t* */
47
48 /* Get date to wait before demuxing more data */
49 ES_OUT_PRIV_GET_WAKE_UP, /* arg1=vlc_tick_t* res=cannot fail */
50
51 /* Select a list of ES */
52 ES_OUT_PRIV_SET_ES_LIST, /* arg1= vlc_es_id_t *const* (null terminated array) */
53
54 ES_OUT_PRIV_SET_ES_CAT_IDS, /* arg1=es_format_category_e arg2=const char *, res=cannot fail */
55
56 /* Stop all selected ES and save the stopped state in a context.
57 * Call ES_OUT_PRIV_START_ALL_ES to release the context. */
58 ES_OUT_PRIV_STOP_ALL_ES, /* arg1=vlc_es_id_t *** */
59 /* Start all ES from the context returned by ES_OUT_PRIV_STOP_ALL_ES */
60 ES_OUT_PRIV_START_ALL_ES, /* arg1=vlc_es_id_t ** */
61
62 /* Get buffering state */
63 ES_OUT_PRIV_GET_BUFFERING, /* arg1=bool* res=cannot fail */
64
65 /* Set delay for an ES identifier */
66 ES_OUT_PRIV_SET_ES_DELAY, /* arg1=vlc_es_id_t *, res=cannot fail */
67
68 /* Set delay for a ES category */
69 ES_OUT_PRIV_SET_DELAY, /* arg1=es_category_e, res=cannot fail */
70
71 /* Set record state */
72 ES_OUT_PRIV_SET_RECORD_STATE, /* arg1=bool res=can fail */
73
74 /* Set pause state */
75 ES_OUT_PRIV_SET_PAUSE_STATE, /* arg1=bool b_source_paused, bool b_paused arg2=vlc_tick_t res=can fail */
76
77 /* Set rate */
78 ES_OUT_PRIV_SET_RATE, /* arg1=double source_rate arg2=double rate res=can fail */
79
80 /* Set next frame */
81 ES_OUT_PRIV_SET_FRAME_NEXT, /* res=can fail */
82
83 /* Set position/time/length */
84 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 res=cannot fail */
85
86 /* Set jitter */
87 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 */
88
89 /* Get forced group */
90 ES_OUT_PRIV_GET_GROUP_FORCED, /* arg1=int * res=cannot fail */
91
92 /* Set End Of Stream */
93 ES_OUT_PRIV_SET_EOS, /* res=cannot fail */
94
95 /* Set a VBI/Teletext page */
96 ES_OUT_PRIV_SET_VBI_PAGE, /* arg1=unsigned res=can fail */
97
98 /* Set VBI/Teletext menu transparent */
99 ES_OUT_PRIV_SET_VBI_TRANSPARENCY /* arg1=bool res=can fail */
101
102static inline int es_out_vaPrivControl( es_out_t *out, int query, va_list args )
103{
104 vlc_assert( out->cbs->priv_control );
105 return out->cbs->priv_control( out, query, args );
106}
107
108static inline int es_out_PrivControl( es_out_t *out, int query, ... )
109{
110 va_list args;
111 va_start( args, query );
112 int result = es_out_vaPrivControl( out, query, args );
113 va_end( args );
114 return result;
115}
116
117static inline void es_out_SetMode( es_out_t *p_out, int i_mode )
118{
119 int i_ret = es_out_PrivControl( p_out, ES_OUT_PRIV_SET_MODE, i_mode );
120 assert( !i_ret );
121}
122static inline int es_out_SetEs( es_out_t *p_out, vlc_es_id_t *id )
123{
124 return es_out_PrivControl( p_out, ES_OUT_PRIV_SET_ES, id );
125}
126static inline int es_out_UnsetEs( es_out_t *p_out, vlc_es_id_t *id )
127{
128 return es_out_PrivControl( p_out, ES_OUT_PRIV_UNSET_ES, id );
129}
130static inline int es_out_RestartEs( es_out_t *p_out, vlc_es_id_t *id )
131{
132 return es_out_PrivControl( p_out, ES_OUT_PRIV_RESTART_ES, id );
133}
134static inline vlc_tick_t es_out_GetWakeup( es_out_t *p_out )
135{
136 vlc_tick_t i_wu;
137 int i_ret = es_out_PrivControl( p_out, ES_OUT_PRIV_GET_WAKE_UP, &i_wu );
138
139 assert( !i_ret );
140 return i_wu;
141}
142static inline int es_out_SetEsList( es_out_t *p_out,
143 enum es_format_category_e cat,
144 vlc_es_id_t **ids )
145{
146 return es_out_PrivControl( p_out, ES_OUT_PRIV_SET_ES_LIST, cat, ids );
147}
148static inline void es_out_SetEsCatIds( es_out_t *p_out,
149 enum es_format_category_e cat,
150 const char *str_ids )
151{
153 cat, str_ids );
154 assert( ret == VLC_SUCCESS );
155}
156static inline int es_out_StopAllEs( es_out_t *p_out, vlc_es_id_t ***context )
157{
158 return es_out_PrivControl( p_out, ES_OUT_PRIV_STOP_ALL_ES, context );
159}
160static inline int es_out_StartAllEs( es_out_t *p_out, vlc_es_id_t **context )
161{
162 return es_out_PrivControl( p_out, ES_OUT_PRIV_START_ALL_ES, context );
163}
164static inline bool es_out_GetBuffering( es_out_t *p_out )
165{
166 bool b;
167 int i_ret = es_out_PrivControl( p_out, ES_OUT_PRIV_GET_BUFFERING, &b );
168
169 assert( !i_ret );
170 return b;
171}
172static inline bool es_out_GetEmpty( es_out_t *p_out )
173{
174 bool b;
175 int i_ret = es_out_Control( p_out, ES_OUT_GET_EMPTY, &b );
176
177 assert( !i_ret );
178 return b;
179}
180static inline void es_out_SetEsDelay( es_out_t *p_out, vlc_es_id_t *es, vlc_tick_t i_delay )
181{
182 int i_ret = es_out_PrivControl( p_out, ES_OUT_PRIV_SET_ES_DELAY, es, i_delay );
183 assert( !i_ret );
184}
185static inline void es_out_SetDelay( es_out_t *p_out, int i_cat, vlc_tick_t i_delay )
186{
187 int i_ret = es_out_PrivControl( p_out, ES_OUT_PRIV_SET_DELAY, i_cat, i_delay );
188 assert( !i_ret );
189}
190static inline int es_out_SetRecordState( es_out_t *p_out, bool b_record, const char *dir_path )
191{
192 return es_out_PrivControl( p_out, ES_OUT_PRIV_SET_RECORD_STATE, b_record, dir_path );
193}
194static inline int es_out_SetPauseState( es_out_t *p_out, bool b_source_paused, bool b_paused, vlc_tick_t i_date )
195{
196 return es_out_PrivControl( p_out, ES_OUT_PRIV_SET_PAUSE_STATE, b_source_paused, b_paused, i_date );
197}
198static inline int es_out_SetRate( es_out_t *p_out, float source_rate, float rate )
199{
200 return es_out_PrivControl( p_out, ES_OUT_PRIV_SET_RATE, source_rate, rate );
201}
202static inline int es_out_SetFrameNext( es_out_t *p_out )
203{
205}
206static inline void es_out_SetTimes( es_out_t *p_out, double f_position,
207 vlc_tick_t i_time, vlc_tick_t i_normal_time,
208 vlc_tick_t i_length )
209{
210 int i_ret = es_out_PrivControl( p_out, ES_OUT_PRIV_SET_TIMES, f_position, i_time,
211 i_normal_time, i_length );
212 assert( !i_ret );
213}
214static inline void es_out_SetJitter( es_out_t *p_out,
215 vlc_tick_t i_pts_delay, vlc_tick_t i_pts_jitter, int i_cr_average )
216{
217 int i_ret = es_out_PrivControl( p_out, ES_OUT_PRIV_SET_JITTER,
218 i_pts_delay, i_pts_jitter, i_cr_average );
219 assert( !i_ret );
220}
221static inline int es_out_GetGroupForced( es_out_t *p_out )
222{
223 int i_group;
224 int i_ret = es_out_PrivControl( p_out, ES_OUT_PRIV_GET_GROUP_FORCED, &i_group );
225 assert( !i_ret );
226 return i_group;
227}
228static inline void es_out_Eos( es_out_t *p_out )
229{
230 int i_ret = es_out_PrivControl( p_out, ES_OUT_PRIV_SET_EOS );
231 assert( !i_ret );
232}
233static inline int es_out_SetVbiPage( es_out_t *p_out, vlc_es_id_t *id,
234 unsigned page )
235{
236 return es_out_PrivControl( p_out, ES_OUT_PRIV_SET_VBI_PAGE, id, page );
237}
238static inline int es_out_SetVbiTransparency( es_out_t *p_out, vlc_es_id_t *id,
239 bool enabled )
240{
242 enabled );
243}
244
245es_out_t *input_EsOutNew( input_thread_t *, input_source_t *main_source, float rate,
246 enum input_type input_type );
249
252
253#endif
static int es_out_StopAllEs(es_out_t *p_out, vlc_es_id_t ***context)
Definition: es_out.h:156
es_out_t * input_EsOutTimeshiftNew(input_thread_t *, es_out_t *, float i_rate)
Definition: es_out_timeshift.c:809
es_out_query_private_e
Definition: es_out.h:39
@ ES_OUT_PRIV_SET_FRAME_NEXT
Definition: es_out.h:81
@ ES_OUT_PRIV_GET_GROUP_FORCED
Definition: es_out.h:90
@ ES_OUT_PRIV_SET_RATE
Definition: es_out.h:78
@ ES_OUT_PRIV_SET_DELAY
Definition: es_out.h:69
@ ES_OUT_PRIV_SET_VBI_PAGE
Definition: es_out.h:96
@ ES_OUT_PRIV_SET_ES_CAT_IDS
Definition: es_out.h:54
@ ES_OUT_PRIV_STOP_ALL_ES
Definition: es_out.h:58
@ ES_OUT_PRIV_RESTART_ES
Definition: es_out.h:46
@ ES_OUT_PRIV_GET_BUFFERING
Definition: es_out.h:63
@ ES_OUT_PRIV_START_ALL_ES
Definition: es_out.h:60
@ ES_OUT_PRIV_SET_ES_DELAY
Definition: es_out.h:66
@ ES_OUT_PRIV_SET_ES
Definition: es_out.h:44
@ ES_OUT_PRIV_SET_ES_LIST
Definition: es_out.h:52
@ ES_OUT_PRIV_SET_PAUSE_STATE
Definition: es_out.h:75
@ ES_OUT_PRIV_SET_VBI_TRANSPARENCY
Definition: es_out.h:99
@ ES_OUT_PRIV_SET_EOS
Definition: es_out.h:93
@ ES_OUT_PRIV_SET_JITTER
Definition: es_out.h:87
@ ES_OUT_PRIV_SET_RECORD_STATE
Definition: es_out.h:72
@ ES_OUT_PRIV_SET_TIMES
Definition: es_out.h:84
@ ES_OUT_PRIV_GET_WAKE_UP
Definition: es_out.h:49
@ ES_OUT_PRIV_SET_MODE
Definition: es_out.h:41
@ ES_OUT_PRIV_UNSET_ES
Definition: es_out.h:45
static int es_out_SetVbiPage(es_out_t *p_out, vlc_es_id_t *id, unsigned page)
Definition: es_out.h:233
static int es_out_SetPauseState(es_out_t *p_out, bool b_source_paused, bool b_paused, vlc_tick_t i_date)
Definition: es_out.h:194
static bool es_out_GetBuffering(es_out_t *p_out)
Definition: es_out.h:164
static int es_out_SetRecordState(es_out_t *p_out, bool b_record, const char *dir_path)
Definition: es_out.h:190
static bool es_out_GetEmpty(es_out_t *p_out)
Definition: es_out.h:172
const input_source_t * vlc_es_id_GetSource(vlc_es_id_t *id)
Definition: es_out.c:4672
static int es_out_SetFrameNext(es_out_t *p_out)
Definition: es_out.h:202
static int es_out_GetGroupForced(es_out_t *p_out)
Definition: es_out.h:221
es_out_t * input_EsOutSourceNew(es_out_t *master_out, input_source_t *in)
Definition: es_out_source.c:80
static int es_out_SetVbiTransparency(es_out_t *p_out, vlc_es_id_t *id, bool enabled)
Definition: es_out.h:238
static int es_out_PrivControl(es_out_t *out, int query,...)
Definition: es_out.h:108
static void es_out_SetTimes(es_out_t *p_out, double f_position, vlc_tick_t i_time, vlc_tick_t i_normal_time, vlc_tick_t i_length)
Definition: es_out.h:206
es_out_t * input_EsOutNew(input_thread_t *, input_source_t *main_source, float rate, enum input_type input_type)
Definition: es_out.c:4040
static void es_out_Eos(es_out_t *p_out)
Definition: es_out.h:228
static int es_out_SetEsList(es_out_t *p_out, enum es_format_category_e cat, vlc_es_id_t **ids)
Definition: es_out.h:142
static vlc_tick_t es_out_GetWakeup(es_out_t *p_out)
Definition: es_out.h:134
static int es_out_vaPrivControl(es_out_t *out, int query, va_list args)
Definition: es_out.h:102
static void es_out_SetEsCatIds(es_out_t *p_out, enum es_format_category_e cat, const char *str_ids)
Definition: es_out.h:148
es_out_mode_e
Definition: es_out.h:30
@ ES_OUT_MODE_NONE
Definition: es_out.h:31
@ ES_OUT_MODE_ALL
Definition: es_out.h:32
@ ES_OUT_MODE_END
Definition: es_out.h:35
@ ES_OUT_MODE_AUTO
Definition: es_out.h:33
@ ES_OUT_MODE_PARTIAL
Definition: es_out.h:34
static void es_out_SetJitter(es_out_t *p_out, vlc_tick_t i_pts_delay, vlc_tick_t i_pts_jitter, int i_cr_average)
Definition: es_out.h:214
es_out_id_t * vlc_es_id_get_out(vlc_es_id_t *id)
Definition: es_out.c:4630
static void es_out_SetDelay(es_out_t *p_out, int i_cat, vlc_tick_t i_delay)
Definition: es_out.h:185
static int es_out_SetRate(es_out_t *p_out, float source_rate, float rate)
Definition: es_out.h:198
static void es_out_SetMode(es_out_t *p_out, int i_mode)
Definition: es_out.h:117
static void es_out_SetEsDelay(es_out_t *p_out, vlc_es_id_t *es, vlc_tick_t i_delay)
Definition: es_out.h:180
static int es_out_SetEs(es_out_t *p_out, vlc_es_id_t *id)
Definition: es_out.h:122
static int es_out_StartAllEs(es_out_t *p_out, vlc_es_id_t **context)
Definition: es_out.h:160
static int es_out_RestartEs(es_out_t *p_out, vlc_es_id_t *id)
Definition: es_out.h:130
static int es_out_UnsetEs(es_out_t *p_out, vlc_es_id_t *id)
Definition: es_out.h:126
#define vlc_assert(pred)
Run-time assertion.
Definition: vlc_common.h:301
#define VLC_SUCCESS
No error.
Definition: vlc_common.h:503
static int es_out_Control(es_out_t *out, int i_query,...)
Definition: vlc_es_out.h:174
@ ES_OUT_GET_EMPTY
Definition: vlc_es_out.h:97
@ ES_OUT_PRIVATE_START
Definition: vlc_es_out.h:122
input_type
Definition: input_internal.h:57
int(* priv_control)(es_out_t *, int query, va_list)
Private control callback, must be NULL for es_out created from modules.
Definition: vlc_es_out.h:144
Definition: es_out.c:109
Definition: vlc_es_out.h:148
const struct es_out_callbacks * cbs
Definition: vlc_es_out.h:149
Definition: input_internal.h:358
Main structure representing an input thread.
Definition: input_internal.h:49
Opaque structure representing an ES (Elementary Stream) track.
Definition: es_out.c:98
This file is a collection of common definitions and types.
es_format_category_e
ES Categories.
Definition: vlc_es.h:613
int64_t vlc_tick_t
High precision date or time interval.
Definition: vlc_tick.h:45