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_stream.h
Go to the documentation of this file.
1
/*****************************************************************************
2
* vlc_stream.h: Stream (between access and demux) descriptor and methods
3
*****************************************************************************
4
* Copyright (C) 1999-2004 VLC authors and VideoLAN
5
* $Id: 24dc14a032f5b08bd6e29fc8f185630cffa71961 $
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 VLC_STREAM_H
25
#define VLC_STREAM_H 1
26
27
#include <
vlc_block.h
>
28
29
/**
30
* \file
31
* This file defines structures and functions for stream (between access and demux) descriptor in vlc
32
*/
33
34
# ifdef __cplusplus
35
extern
"C"
{
36
# endif
37
38
/**
39
* \defgroup stream Stream
40
*
41
* This will allow you to easily handle read/seek in demuxer modules.
42
* @{
43
*/
44
45
/* Opaque definition for text reader context */
46
typedef
struct
stream_text_t
stream_text_t
;
47
48
/**
49
* stream_t definition
50
*/
51
52
struct
stream_t
53
{
54
VLC_COMMON_MEMBERS
55
bool
b_error
;
56
57
/* Module properties for stream filter */
58
module_t
*
p_module
;
59
60
char
*
psz_access
;
61
/* Real or virtual path (it can only be changed during stream_t opening) */
62
char
*
psz_path
;
63
64
/* Stream source for stream filter */
65
stream_t
*
p_source
;
66
67
/* */
68
int (*
pf_read
) (
stream_t
*,
void
*p_read,
unsigned
int
i_read );
69
int (*
pf_peek
) (
stream_t
*,
const
uint8_t **pp_peek,
unsigned
int
i_peek );
70
int (*
pf_control
)(
stream_t
*,
int
i_query, va_list );
71
72
/* */
73
void (*
pf_destroy
)(
stream_t
*);
74
75
/* Private data for module */
76
stream_sys_t
*
p_sys
;
77
78
/* Text reader state */
79
stream_text_t
*
p_text
;
80
81
/* Weak link to parent input */
82
input_thread_t
*
p_input
;
83
};
84
85
/**
86
* Possible commands to send to stream_Control() and stream_vaControl()
87
*/
88
enum
stream_query_e
89
{
90
/* capabilities */
91
STREAM_CAN_SEEK
,
/**< arg1= bool * res=cannot fail*/
92
STREAM_CAN_FASTSEEK
,
/**< arg1= bool * res=cannot fail*/
93
94
/* */
95
STREAM_SET_POSITION
,
/**< arg1= uint64_t res=can fail */
96
STREAM_GET_POSITION
,
/**< arg1= uint64_t * res=cannot fail*/
97
98
STREAM_GET_SIZE
,
/**< arg1= uint64_t * res=cannot fail (0 if no sense)*/
99
100
/* Special for direct access control from demuxer.
101
* XXX: avoid using it by all means */
102
STREAM_CONTROL_ACCESS
,
/* arg1= int i_access_query, args res: can fail
103
if access unreachable or access control answer */
104
105
/* You should update size of source if any and then update size
106
* FIXME find a way to avoid it */
107
STREAM_UPDATE_SIZE
,
108
109
/* */
110
STREAM_GET_CONTENT_TYPE
,
/**< arg1= char ** res=can fail */
111
112
/* XXX only data read through stream_Read/Block will be recorded */
113
STREAM_SET_RECORD_STATE
,
/**< arg1=bool, arg2=const char *psz_ext (if arg1 is true) res=can fail */
114
};
115
116
VLC_API
int
stream_Read
(
stream_t
*s,
void
*p_read,
int
i_read );
117
VLC_API
int
stream_Peek
(
stream_t
*s,
const
uint8_t **pp_peek,
int
i_peek );
118
VLC_API
int
stream_vaControl
(
stream_t
*s,
int
i_query, va_list args );
119
VLC_API
void
stream_Delete
(
stream_t
*s );
120
VLC_API
int
stream_Control
(
stream_t
*s,
int
i_query, ... );
121
VLC_API
block_t
*
stream_Block
(
stream_t
*s,
int
i_size );
122
VLC_API
block_t
*
stream_BlockRemaining
(
stream_t
*s,
int
i_max_size );
123
VLC_API
char
*
stream_ReadLine
(
stream_t
* );
124
125
/**
126
* Get the current position in a stream
127
*/
128
static
inline
int64_t
stream_Tell
(
stream_t
*s )
129
{
130
uint64_t i_pos;
131
stream_Control
( s,
STREAM_GET_POSITION
, &i_pos );
132
if
( i_pos >> 62 )
133
return
(int64_t)1 << 62;
134
return
i_pos;
135
}
136
137
/**
138
* Get the size of the stream.
139
*/
140
static
inline
int64_t
stream_Size
(
stream_t
*s )
141
{
142
uint64_t i_pos;
143
stream_Control
( s,
STREAM_GET_SIZE
, &i_pos );
144
if
( i_pos >> 62 )
145
return
(int64_t)1 << 62;
146
return
i_pos;
147
}
148
149
static
inline
int
stream_Seek
(
stream_t
*s, uint64_t i_pos )
150
{
151
return
stream_Control
( s,
STREAM_SET_POSITION
, i_pos );
152
}
153
154
/**
155
* Get the Content-Type of a stream, or NULL if unknown.
156
* Result must be free()'d.
157
*/
158
static
inline
char
*
stream_ContentType
(
stream_t
*s )
159
{
160
char
*res;
161
if
(
stream_Control
( s,
STREAM_GET_CONTENT_TYPE
, &res ) )
162
return
NULL;
163
return
res;
164
}
165
166
/**
167
* Create a special stream and a demuxer, this allows chaining demuxers
168
* You must delete it using stream_Delete.
169
*/
170
VLC_API
stream_t
*
stream_DemuxNew
(
demux_t
*p_demux,
const
char
*psz_demux,
es_out_t
*out );
171
172
/**
173
* Send data to a stream handle created by stream_DemuxNew().
174
*/
175
VLC_API
void
stream_DemuxSend
(
stream_t
*s,
block_t
*p_block );
176
177
/**
178
* Perform a <b>demux</b> (i.e. DEMUX_...) control request on a stream handle
179
* created by stream_DemuxNew().
180
*/
181
VLC_API
int
stream_DemuxControlVa
(
stream_t
*s,
int
, va_list );
182
183
static
inline
int
stream_DemuxControl
(
stream_t
*s,
int
query
, ... )
184
{
185
va_list ap;
186
int
ret;
187
188
va_start( ap, query );
189
ret =
stream_DemuxControlVa
( s, query, ap );
190
va_end( ap );
191
return
ret;
192
}
193
194
/**
195
* Create a stream_t reading from memory.
196
* You must delete it using stream_Delete.
197
*/
198
VLC_API
stream_t
*
stream_MemoryNew
(
vlc_object_t
*p_obj, uint8_t *p_buffer, uint64_t i_size,
bool
b_preserve_memory );
199
#define stream_MemoryNew( a, b, c, d ) stream_MemoryNew( VLC_OBJECT(a), b, c, d )
200
201
/**
202
* Create a stream_t reading from a URL.
203
* You must delete it using stream_Delete.
204
*/
205
VLC_API
stream_t
*
stream_UrlNew
(
vlc_object_t
*p_this,
const
char
*psz_url );
206
#define stream_UrlNew( a, b ) stream_UrlNew( VLC_OBJECT(a), b )
207
208
209
/**
210
* Try to add a stream filter to an open stream.
211
* @return New stream to use, or NULL if the filter could not be added.
212
**/
213
VLC_API
stream_t
*
stream_FilterNew
(
stream_t
*p_source,
const
char
*psz_stream_filter );
214
/**
215
* @}
216
*/
217
218
# ifdef __cplusplus
219
}
220
# endif
221
222
#endif
Generated by
1.8.1.2