VLC
2.1.0-git
Main Page
Related Pages
Modules
Data Structures
Files
File List
Globals
All
Data Structures
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
include
vlc_sout.h
Go to the documentation of this file.
1
/*****************************************************************************
2
* vlc_sout.h : stream output module
3
*****************************************************************************
4
* Copyright (C) 2002-2008 VLC authors and VideoLAN
5
* $Id: 87d8229baee6c6e09e9fe11e1ee4c4761d749af4 $
6
*
7
* Authors: Christophe Massiot <massiot@via.ecp.fr>
8
* Laurent Aimar <fenrir@via.ecp.fr>
9
* Eric Petit <titer@videolan.org>
10
* Jean-Paul Saman <jpsaman #_at_# m2x.nl>
11
* Rémi Denis-Courmont
12
*
13
* This program is free software; you can redistribute it and/or modify it
14
* under the terms of the GNU Lesser General Public License as published by
15
* the Free Software Foundation; either version 2.1 of the License, or
16
* (at your option) any later version.
17
*
18
* This program is distributed in the hope that it will be useful,
19
* but WITHOUT ANY WARRANTY; without even the implied warranty of
20
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
* GNU Lesser General Public License for more details.
22
*
23
* You should have received a copy of the GNU Lesser General Public License
24
* along with this program; if not, write to the Free Software Foundation,
25
* Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
26
*****************************************************************************/
27
28
#ifndef VLC_SOUT_H_
29
#define VLC_SOUT_H_
30
31
/**
32
* \file
33
* This file defines structures and functions for stream output in vlc
34
*/
35
36
#ifdef __cplusplus
37
extern
"C"
{
38
#endif
39
40
#include <sys/types.h>
41
#include <
vlc_es.h
>
42
43
/** Stream output instance (FIXME: should be private to src/ to avoid
44
* invalid unsynchronized access) */
45
struct
sout_instance_t
46
{
47
VLC_COMMON_MEMBERS
48
49
char
*
psz_sout
;
50
51
/** count of output that can't control the space */
52
int
i_out_pace_nocontrol
;
53
54
vlc_mutex_t
lock
;
55
sout_stream_t
*
p_stream
;
56
};
57
58
/****************************************************************************
59
* sout_stream_id_t: opaque (private for all sout_stream_t)
60
****************************************************************************/
61
typedef
struct
sout_stream_id_t
sout_stream_id_t
;
62
63
/** Stream output access_output */
64
struct
sout_access_out_t
65
{
66
VLC_COMMON_MEMBERS
67
68
module_t
*
p_module
;
69
char
*
psz_access
;
70
71
char
*
psz_path
;
72
sout_access_out_sys_t
*
p_sys
;
73
int (*
pf_seek
)(
sout_access_out_t
*, off_t );
74
ssize_t (*
pf_read
)(
sout_access_out_t
*,
block_t
* );
75
ssize_t (*
pf_write
)(
sout_access_out_t
*,
block_t
* );
76
int (*
pf_control
)(
sout_access_out_t
*, int, va_list );
77
78
config_chain_t
*
p_cfg
;
79
};
80
81
enum
access_out_query_e
82
{
83
ACCESS_OUT_CONTROLS_PACE
,
/* arg1=bool *, can fail (assume true) */
84
};
85
86
VLC_API
sout_access_out_t
*
sout_AccessOutNew
(
vlc_object_t
*,
const
char
*psz_access,
const
char
*
psz_name
)
VLC_USED
;
87
#define sout_AccessOutNew( obj, access, name ) \
88
sout_AccessOutNew( VLC_OBJECT(obj), access, name )
89
VLC_API
void
sout_AccessOutDelete
(
sout_access_out_t
* );
90
VLC_API
int
sout_AccessOutSeek
(
sout_access_out_t
*, off_t );
91
VLC_API
ssize_t
sout_AccessOutRead
(
sout_access_out_t
*,
block_t
* );
92
VLC_API
ssize_t
sout_AccessOutWrite
(
sout_access_out_t
*,
block_t
* );
93
VLC_API
int
sout_AccessOutControl
(
sout_access_out_t
*,
int
, ... );
94
95
static
inline
bool
sout_AccessOutCanControlPace
(
sout_access_out_t
*p_ao )
96
{
97
bool
b;
98
if
(
sout_AccessOutControl
( p_ao,
ACCESS_OUT_CONTROLS_PACE
, &b ) )
99
return
true
;
100
return
b;
101
}
102
103
/** Muxer structure */
104
struct
sout_mux_t
105
{
106
VLC_COMMON_MEMBERS
107
module_t
*
p_module
;
108
109
sout_instance_t
*
p_sout
;
110
111
char
*
psz_mux
;
112
config_chain_t
*
p_cfg
;
113
114
sout_access_out_t
*
p_access
;
115
116
int (*
pf_addstream
)(
sout_mux_t
*,
sout_input_t
* );
117
int (*
pf_delstream
)(
sout_mux_t
*,
sout_input_t
* );
118
int (*
pf_mux
) (
sout_mux_t
* );
119
int (*
pf_control
) (
sout_mux_t
*, int, va_list );
120
121
/* here are all inputs accepted by muxer */
122
int
i_nb_inputs
;
123
sout_input_t
**
pp_inputs
;
124
125
/* mux private */
126
sout_mux_sys_t
*
p_sys
;
127
128
/* XXX private to stream_output.c */
129
/* if muxer doesn't support adding stream at any time then we first wait
130
* for stream then we refuse all stream and start muxing */
131
bool
b_add_stream_any_time
;
132
bool
b_waiting_stream
;
133
/* we wait one second after first stream added */
134
mtime_t
i_add_stream_start
;
135
};
136
137
enum
sout_mux_query_e
138
{
139
/* capabilities */
140
MUX_CAN_ADD_STREAM_WHILE_MUXING
,
/* arg1= bool *, res=cannot fail */
141
/* properties */
142
MUX_GET_ADD_STREAM_WAIT
,
/* arg1= bool *, res=cannot fail */
143
MUX_GET_MIME
,
/* arg1= char ** res=can fail */
144
};
145
146
struct
sout_input_t
147
{
148
es_format_t
*
p_fmt
;
149
block_fifo_t
*
p_fifo
;
150
151
void
*
p_sys
;
152
};
153
154
155
VLC_API
sout_mux_t
*
sout_MuxNew
(
sout_instance_t
*,
const
char
*,
sout_access_out_t
* ) VLC_USED;
156
VLC_API
sout_input_t
*
sout_MuxAddStream
(
sout_mux_t
*,
es_format_t
* ) VLC_USED;
157
VLC_API
void
sout_MuxDeleteStream
( sout_mux_t *,
sout_input_t
* );
158
VLC_API
void
sout_MuxDelete
( sout_mux_t * );
159
VLC_API
void
sout_MuxSendBuffer
( sout_mux_t *, sout_input_t *,
block_t
* );
160
VLC_API
int
sout_MuxGetStream
(sout_mux_t *,
int
,
mtime_t
*);
161
162
static inline
int
sout_MuxControl
( sout_mux_t *p_mux,
int
i_query, ... )
163
{
164
va_list args;
165
int
i_result;
166
167
va_start( args, i_query );
168
i_result = p_mux->pf_control( p_mux, i_query, args );
169
va_end( args );
170
return
i_result;
171
}
172
173
/****************************************************************************
174
* sout_stream:
175
****************************************************************************/
176
struct
sout_stream_t
177
{
178
VLC_COMMON_MEMBERS
179
180
module_t
*
p_module
;
181
sout_instance_t
*
p_sout
;
182
183
char
*
psz_name
;
184
config_chain_t
*
p_cfg
;
185
sout_stream_t
*
p_next
;
186
187
/* add, remove a stream */
188
sout_stream_id_t
*(*pf_add)(
sout_stream_t
*,
es_format_t
* );
189
int (*
pf_del
)(
sout_stream_t
*,
sout_stream_id_t
* );
190
/* manage a packet */
191
int (*
pf_send
)(
sout_stream_t
*,
sout_stream_id_t
*,
block_t
* );
192
193
sout_stream_sys_t
*
p_sys
;
194
bool
pace_nocontrol
;
195
};
196
197
VLC_API
void
sout_StreamChainDelete
(
sout_stream_t
*p_first,
sout_stream_t
*p_last );
198
VLC_API
sout_stream_t
*
sout_StreamChainNew
(
sout_instance_t
*p_sout,
199
char
*psz_chain,
sout_stream_t
*p_next,
sout_stream_t
**p_last)
VLC_USED
;
200
201
static
inline
sout_stream_id_t
*
sout_StreamIdAdd
(
sout_stream_t
*s,
es_format_t
*fmt )
202
{
203
return
s->
pf_add
( s, fmt );
204
}
205
static
inline
int
sout_StreamIdDel
(
sout_stream_t
*s,
sout_stream_id_t
*
id
)
206
{
207
return
s->
pf_del
( s,
id
);
208
}
209
static
inline
int
sout_StreamIdSend
(
sout_stream_t
*s,
sout_stream_id_t
*
id
,
block_t
*b )
210
{
211
return
s->
pf_send
( s,
id
, b );
212
}
213
214
/****************************************************************************
215
* Encoder
216
****************************************************************************/
217
218
VLC_API
encoder_t
*
sout_EncoderCreate
(
vlc_object_t
*obj );
219
#define sout_EncoderCreate(o) sout_EncoderCreate(VLC_OBJECT(o))
220
221
/****************************************************************************
222
* Announce handler
223
****************************************************************************/
224
VLC_API
session_descriptor_t
*
sout_AnnounceRegisterSDP
(
vlc_object_t
*,
const
char
*,
const
char
* ) VLC_USED;
225
VLC_API
int
sout_AnnounceUnRegister
(
vlc_object_t
*,
session_descriptor_t
* );
226
#define sout_AnnounceRegisterSDP(o, sdp, addr) \
227
sout_AnnounceRegisterSDP(VLC_OBJECT (o), sdp, addr)
228
#define sout_AnnounceUnRegister(o, a) \
229
sout_AnnounceUnRegister(VLC_OBJECT (o), a)
230
231
/** SDP */
232
233
struct
sockaddr;
234
235
VLC_API
char
*
vlc_sdp_Start
( vlc_object_t *obj,
const
char
*cfgpref,
const
struct
sockaddr *src,
size_t
srclen,
const
struct
sockaddr *addr,
size_t
addrlen )
VLC_USED
;
236
VLC_API
char
*
sdp_AddMedia
(
char
**sdp,
const
char
*type,
const
char
*protocol,
int
dport,
unsigned
pt,
bool
bw_indep,
unsigned
bw,
const
char
*ptname,
unsigned
clockrate,
unsigned
channels,
const
char
*fmtp);
237
VLC_API
char
*
sdp_AddAttribute
(
char
**sdp,
const
char
*
name
,
const
char
*fmt, ...)
VLC_FORMAT
( 3, 4 );
238
239
/** Description module */
240
typedef struct
sout_description_data_t
241
{
242
int
i_es;
243
es_format_t
**es;
244
vlc_sem_t
*sem;
245
}
sout_description_data_t
;
246
247
#ifdef __cplusplus
248
}
249
#endif
250
251
#endif
Generated by
1.8.1.2