Commit | Line | Data |
---|---|---|
04d7f601 | 1 | /* |
04d7f601 DB |
2 | * copyright (c) 2001 Fabrice Bellard |
3 | * | |
b78e7197 DB |
4 | * This file is part of FFmpeg. |
5 | * | |
6 | * FFmpeg is free software; you can redistribute it and/or | |
04d7f601 DB |
7 | * modify it under the terms of the GNU Lesser General Public |
8 | * License as published by the Free Software Foundation; either | |
b78e7197 | 9 | * version 2.1 of the License, or (at your option) any later version. |
04d7f601 | 10 | * |
b78e7197 | 11 | * FFmpeg is distributed in the hope that it will be useful, |
04d7f601 DB |
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
14 | * Lesser General Public License for more details. | |
15 | * | |
16 | * You should have received a copy of the GNU Lesser General Public | |
b78e7197 | 17 | * License along with FFmpeg; if not, write to the Free Software |
04d7f601 DB |
18 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
19 | */ | |
98790382 SS |
20 | #ifndef AVFORMAT_AVIO_H |
21 | #define AVFORMAT_AVIO_H | |
f031df23 | 22 | |
aafe9b63 SS |
23 | /** |
24 | * @file libavformat/avio.h | |
25 | * unbuffered I/O operations | |
3f4c2bf9 SS |
26 | * |
27 | * @warning This file has to be considered an internal but installed | |
28 | * header, so it should not be directly included in your projects. | |
aafe9b63 SS |
29 | */ |
30 | ||
99545457 MR |
31 | #include <stdint.h> |
32 | ||
30f68128 DB |
33 | #include "libavutil/common.h" |
34 | ||
de6d9b64 FB |
35 | /* unbuffered I/O */ |
36 | ||
1308f273 MN |
37 | /** |
38 | * URL Context. | |
39 | * New fields can be added to the end with minor version bumps. | |
8bfb108b | 40 | * Removal, reordering and changes to existing fields require a major |
1308f273 | 41 | * version bump. |
8bfb108b | 42 | * sizeof(URLContext) must not be used outside libav*. |
1308f273 | 43 | */ |
597b4b3f | 44 | typedef struct URLContext { |
5acef35f BA |
45 | #if LIBAVFORMAT_VERSION_MAJOR >= 53 |
46 | const AVClass *av_class; ///< information for av_log(). Set by url_open(). | |
47 | #endif | |
de6d9b64 | 48 | struct URLProtocol *prot; |
115329f1 | 49 | int flags; |
c3316802 PI |
50 | int is_streamed; /**< true if streamed (no seek possible), default = false */ |
51 | int max_packet_size; /**< if non zero, the stream is packetized with this max packet size */ | |
de6d9b64 | 52 | void *priv_data; |
725b3da9 | 53 | char *filename; /**< specified URL */ |
597b4b3f | 54 | } URLContext; |
de6d9b64 FB |
55 | |
56 | typedef struct URLPollEntry { | |
57 | URLContext *handle; | |
58 | int events; | |
59 | int revents; | |
60 | } URLPollEntry; | |
61 | ||
62 | #define URL_RDONLY 0 | |
63 | #define URL_WRONLY 1 | |
f031df23 FB |
64 | #define URL_RDWR 2 |
65 | ||
019ac05a FB |
66 | typedef int URLInterruptCB(void); |
67 | ||
333146dd SS |
68 | /** |
69 | * Creates an URLContext for accessing to the resource indicated by | |
725b3da9 | 70 | * url, and opens it using the URLProtocol up. |
333146dd SS |
71 | * |
72 | * @param puc pointer to the location where, in case of success, the | |
73 | * function puts the pointer to the created URLContext | |
725b3da9 | 74 | * @param flags flags which control how the resource indicated by url |
333146dd SS |
75 | * is to be opened |
76 | * @return 0 in case of success, a negative value corresponding to an | |
77 | * AVERROR code in case of failure | |
78 | */ | |
ba99cfc2 | 79 | int url_open_protocol (URLContext **puc, struct URLProtocol *up, |
725b3da9 | 80 | const char *url, int flags); |
333146dd | 81 | |
b0634fd1 SS |
82 | /** |
83 | * Creates an URLContext for accessing to the resource indicated by | |
84 | * url, and opens it. | |
85 | * | |
86 | * @param puc pointer to the location where, in case of success, the | |
87 | * function puts the pointer to the created URLContext | |
88 | * @param flags flags which control how the resource indicated by url | |
89 | * is to be opened | |
90 | * @return 0 in case of success, a negative value corresponding to an | |
91 | * AVERROR code in case of failure | |
92 | */ | |
725b3da9 | 93 | int url_open(URLContext **h, const char *url, int flags); |
1f8ad15a SS |
94 | |
95 | /** | |
96 | * Reads up to size bytes from the resource accessed by h, and stores | |
97 | * the read bytes in buf. | |
98 | * | |
99 | * @return The number of bytes actually read, or a negative value | |
100 | * corresponding to an AVERROR code in case of error. A value of zero | |
101 | * indicates that it is not possible to read more from the accessed | |
102 | * resource (except if the value of the size argument is also zero). | |
103 | */ | |
de6d9b64 | 104 | int url_read(URLContext *h, unsigned char *buf, int size); |
1f8ad15a | 105 | |
ddb901b7 RD |
106 | /** |
107 | * Read as many bytes as possible (up to size), calling the | |
108 | * read function multiple times if necessary. | |
109 | * Will also retry if the read function returns AVERROR(EAGAIN). | |
110 | * This makes special short-read handling in applications | |
111 | * unnecessary, if the return value is < size then it is | |
112 | * certain there was either an error or the end of file was reached. | |
113 | */ | |
0e848977 | 114 | int url_read_complete(URLContext *h, unsigned char *buf, int size); |
de6d9b64 | 115 | int url_write(URLContext *h, unsigned char *buf, int size); |
9bee2459 SS |
116 | |
117 | /** | |
118 | * Changes the position that will be used by the next read/write | |
119 | * operation on the resource accessed by h. | |
120 | * | |
121 | * @param pos specifies the new position to set | |
122 | * @param whence specifies how pos should be interpreted, it must be | |
123 | * one of SEEK_SET (seek from the beginning), SEEK_CUR (seek from the | |
124 | * current position), SEEK_END (seek from the end), or AVSEEK_SIZE | |
125 | * (return the filesize of the requested resource, pos is ignored). | |
126 | * @return a negative value corresponding to an AVERROR code in case | |
127 | * of failure, or the resulting file position, measured in bytes from | |
128 | * the beginning of the file. You can use this feature together with | |
129 | * SEEK_CUR to read the current file position. | |
130 | */ | |
bc5c918e | 131 | int64_t url_seek(URLContext *h, int64_t pos, int whence); |
f1f78a9d SS |
132 | |
133 | /** | |
134 | * Closes the resource accessed by the URLContext h, and frees the | |
135 | * memory used by it. | |
136 | * | |
137 | * @return a negative value if an error condition occurred, 0 | |
138 | * otherwise | |
139 | */ | |
de6d9b64 | 140 | int url_close(URLContext *h); |
f1f78a9d | 141 | |
725b3da9 | 142 | int url_exist(const char *url); |
bc5c918e | 143 | int64_t url_filesize(URLContext *h); |
c306748c | 144 | |
c3316802 | 145 | /** |
f0a80394 RB |
146 | * Return the file descriptor associated with this URL. For RTP, this |
147 | * will return only the RTP file descriptor, not the RTCP file descriptor. | |
148 | * To get both, use rtp_get_file_handles(). | |
149 | * | |
150 | * @return the file descriptor associated with this URL, or <0 on error. | |
151 | */ | |
152 | int url_get_file_handle(URLContext *h); | |
153 | ||
154 | /** | |
c306748c | 155 | * Return the maximum packet size associated to packetized file |
8bfb108b | 156 | * handle. If the file is not packetized (stream like HTTP or file on |
c306748c PI |
157 | * disk), then 0 is returned. |
158 | * | |
159 | * @param h file handle | |
160 | * @return maximum packet size in bytes | |
161 | */ | |
f031df23 | 162 | int url_get_max_packet_size(URLContext *h); |
f746a046 FB |
163 | void url_get_filename(URLContext *h, char *buf, int buf_size); |
164 | ||
c3316802 | 165 | /** |
8bfb108b | 166 | * The callback is called in blocking functions to test regulary if |
c3316802 PI |
167 | * asynchronous interruption is needed. AVERROR(EINTR) is returned |
168 | * in this case by the interrupted function. 'NULL' means no interrupt | |
8bfb108b | 169 | * callback is given. |
c3316802 | 170 | */ |
019ac05a FB |
171 | void url_set_interrupt_cb(URLInterruptCB *interrupt_cb); |
172 | ||
de6d9b64 FB |
173 | /* not implemented */ |
174 | int url_poll(URLPollEntry *poll_table, int n, int timeout); | |
175 | ||
502bdf68 MN |
176 | /** |
177 | * Pause and resume playing - only meaningful if using a network streaming | |
178 | * protocol (e.g. MMS). | |
179 | * @param pause 1 for pause, 0 for resume | |
180 | */ | |
181 | int av_url_read_pause(URLContext *h, int pause); | |
8bfb108b | 182 | |
536333a0 BA |
183 | /** |
184 | * Seek to a given timestamp relative to some component stream. | |
8bfb108b | 185 | * Only meaningful if using a network streaming protocol (e.g. MMS.). |
536333a0 BA |
186 | * @param stream_index The stream index that the timestamp is relative to. |
187 | * If stream_index is (-1) the timestamp should be in AV_TIME_BASE | |
188 | * units from the beginning of the presentation. | |
189 | * If a stream_index >= 0 is used and the protocol does not support | |
190 | * seeking based on component streams, the call will fail with ENOTSUP. | |
00ef4f58 | 191 | * @param timestamp timestamp in AVStream.time_base units |
536333a0 BA |
192 | * or if there is no stream specified then in AV_TIME_BASE units. |
193 | * @param flags Optional combination of AVSEEK_FLAG_BACKWARD, AVSEEK_FLAG_BYTE | |
194 | * and AVSEEK_FLAG_ANY. The protocol may silently ignore | |
195 | * AVSEEK_FLAG_BACKWARD and AVSEEK_FLAG_ANY, but AVSEEK_FLAG_BYTE will | |
196 | * fail with ENOTSUP if used and not supported. | |
197 | * @return >= 0 on success | |
198 | * @see AVInputFormat::read_seek | |
199 | */ | |
7f37f568 DB |
200 | int64_t av_url_read_seek(URLContext *h, int stream_index, |
201 | int64_t timestamp, int flags); | |
536333a0 | 202 | |
aa38b097 | 203 | /** |
90b5b51e DB |
204 | * Passing this as the "whence" parameter to a seek function causes it to |
205 | * return the filesize without seeking anywhere. Supporting this is optional. | |
206 | * If it is not supported then the seek function will return <0. | |
aa38b097 | 207 | */ |
8e287af0 MN |
208 | #define AVSEEK_SIZE 0x10000 |
209 | ||
493f54ad MN |
210 | /** |
211 | * Oring this flag as into the "whence" parameter to a seek function causes it to | |
212 | * seek by any means (like reopening and linear reading) or other normally unreasonble | |
213 | * means that can be extreemly slow. | |
214 | * This may be ignored by the seek code. | |
215 | */ | |
216 | #define AVSEEK_FORCE 0x20000 | |
217 | ||
de6d9b64 FB |
218 | typedef struct URLProtocol { |
219 | const char *name; | |
725b3da9 | 220 | int (*url_open)(URLContext *h, const char *url, int flags); |
de6d9b64 FB |
221 | int (*url_read)(URLContext *h, unsigned char *buf, int size); |
222 | int (*url_write)(URLContext *h, unsigned char *buf, int size); | |
bc5c918e | 223 | int64_t (*url_seek)(URLContext *h, int64_t pos, int whence); |
de6d9b64 | 224 | int (*url_close)(URLContext *h); |
de6d9b64 | 225 | struct URLProtocol *next; |
502bdf68 | 226 | int (*url_read_pause)(URLContext *h, int pause); |
7f37f568 DB |
227 | int64_t (*url_read_seek)(URLContext *h, int stream_index, |
228 | int64_t timestamp, int flags); | |
f0a80394 | 229 | int (*url_get_file_handle)(URLContext *h); |
de6d9b64 FB |
230 | } URLProtocol; |
231 | ||
d1037c12 | 232 | #if LIBAVFORMAT_VERSION_MAJOR < 53 |
de6d9b64 | 233 | extern URLProtocol *first_protocol; |
d1037c12 SS |
234 | #endif |
235 | ||
019ac05a | 236 | extern URLInterruptCB *url_interrupt_cb; |
de6d9b64 | 237 | |
9075d1e0 SS |
238 | /** |
239 | * If protocol is NULL, returns the first registered protocol, | |
c1b02101 | 240 | * if protocol is non-NULL, returns the next registered protocol after protocol, |
9075d1e0 SS |
241 | * or NULL if protocol is the last one. |
242 | */ | |
84be6e72 MN |
243 | URLProtocol *av_protocol_next(URLProtocol *p); |
244 | ||
65c40e4e SS |
245 | #if LIBAVFORMAT_VERSION_MAJOR < 53 |
246 | /** | |
247 | * @deprecated Use av_register_protocol() instead. | |
248 | */ | |
249 | attribute_deprecated int register_protocol(URLProtocol *protocol); | |
250 | #endif | |
251 | ||
d19a046e SS |
252 | /** |
253 | * Registers the URLProtocol protocol. | |
254 | */ | |
65c40e4e | 255 | int av_register_protocol(URLProtocol *protocol); |
de6d9b64 | 256 | |
1308f273 MN |
257 | /** |
258 | * Bytestream IO Context. | |
259 | * New fields can be added to the end with minor version bumps. | |
8bfb108b | 260 | * Removal, reordering and changes to existing fields require a major |
1308f273 | 261 | * version bump. |
8bfb108b | 262 | * sizeof(ByteIOContext) must not be used outside libav*. |
1308f273 | 263 | */ |
de6d9b64 FB |
264 | typedef struct { |
265 | unsigned char *buffer; | |
266 | int buffer_size; | |
267 | unsigned char *buf_ptr, *buf_end; | |
268 | void *opaque; | |
0c1a9eda | 269 | int (*read_packet)(void *opaque, uint8_t *buf, int buf_size); |
576ae256 | 270 | int (*write_packet)(void *opaque, uint8_t *buf, int buf_size); |
bc5c918e DB |
271 | int64_t (*seek)(void *opaque, int64_t offset, int whence); |
272 | int64_t pos; /**< position in the file of the current buffer */ | |
c3316802 PI |
273 | int must_flush; /**< true if the next seek should flush */ |
274 | int eof_reached; /**< true if eof reached */ | |
275 | int write_flag; /**< true if open for writing */ | |
de6d9b64 | 276 | int is_streamed; |
f031df23 | 277 | int max_packet_size; |
ee9f36a8 MN |
278 | unsigned long checksum; |
279 | unsigned char *checksum_ptr; | |
280 | unsigned long (*update_checksum)(unsigned long checksum, const uint8_t *buf, unsigned int size); | |
576ae256 | 281 | int error; ///< contains the error code or 0 if no error happened |
502bdf68 | 282 | int (*read_pause)(void *opaque, int pause); |
7f37f568 DB |
283 | int64_t (*read_seek)(void *opaque, int stream_index, |
284 | int64_t timestamp, int flags); | |
de6d9b64 FB |
285 | } ByteIOContext; |
286 | ||
287 | int init_put_byte(ByteIOContext *s, | |
288 | unsigned char *buffer, | |
289 | int buffer_size, | |
290 | int write_flag, | |
291 | void *opaque, | |
1e0f3468 RD |
292 | int (*read_packet)(void *opaque, uint8_t *buf, int buf_size), |
293 | int (*write_packet)(void *opaque, uint8_t *buf, int buf_size), | |
bc5c918e | 294 | int64_t (*seek)(void *opaque, int64_t offset, int whence)); |
1e0f3468 RD |
295 | ByteIOContext *av_alloc_put_byte( |
296 | unsigned char *buffer, | |
297 | int buffer_size, | |
298 | int write_flag, | |
299 | void *opaque, | |
0c1a9eda | 300 | int (*read_packet)(void *opaque, uint8_t *buf, int buf_size), |
576ae256 | 301 | int (*write_packet)(void *opaque, uint8_t *buf, int buf_size), |
bc5c918e | 302 | int64_t (*seek)(void *opaque, int64_t offset, int whence)); |
de6d9b64 FB |
303 | |
304 | void put_byte(ByteIOContext *s, int b); | |
75bdb984 | 305 | void put_buffer(ByteIOContext *s, const unsigned char *buf, int size); |
0c1a9eda ZK |
306 | void put_le64(ByteIOContext *s, uint64_t val); |
307 | void put_be64(ByteIOContext *s, uint64_t val); | |
de6d9b64 FB |
308 | void put_le32(ByteIOContext *s, unsigned int val); |
309 | void put_be32(ByteIOContext *s, unsigned int val); | |
ea395e8c | 310 | void put_le24(ByteIOContext *s, unsigned int val); |
a254c574 | 311 | void put_be24(ByteIOContext *s, unsigned int val); |
de6d9b64 FB |
312 | void put_le16(ByteIOContext *s, unsigned int val); |
313 | void put_be16(ByteIOContext *s, unsigned int val); | |
0570bf06 | 314 | void put_tag(ByteIOContext *s, const char *tag); |
de6d9b64 | 315 | |
3b4b29dc | 316 | void put_strz(ByteIOContext *s, const char *buf); |
75bdb984 | 317 | |
67e21020 MN |
318 | /** |
319 | * fseek() equivalent for ByteIOContext. | |
320 | * @return new position or AVERROR. | |
321 | */ | |
bc5c918e | 322 | int64_t url_fseek(ByteIOContext *s, int64_t offset, int whence); |
67e21020 MN |
323 | |
324 | /** | |
325 | * Skip given number of bytes forward. | |
326 | * @param offset number of bytes | |
327 | */ | |
bc5c918e | 328 | void url_fskip(ByteIOContext *s, int64_t offset); |
67e21020 MN |
329 | |
330 | /** | |
331 | * ftell() equivalent for ByteIOContext. | |
332 | * @return position or AVERROR. | |
333 | */ | |
bc5c918e | 334 | int64_t url_ftell(ByteIOContext *s); |
67e21020 MN |
335 | |
336 | /** | |
337 | * Gets the filesize. | |
338 | * @return filesize or AVERROR | |
339 | */ | |
bc5c918e | 340 | int64_t url_fsize(ByteIOContext *s); |
67e21020 MN |
341 | |
342 | /** | |
343 | * feof() equivalent for ByteIOContext. | |
344 | * @return non zero if and only if end of file | |
345 | */ | |
de6d9b64 | 346 | int url_feof(ByteIOContext *s); |
67e21020 | 347 | |
576ae256 | 348 | int url_ferror(ByteIOContext *s); |
de6d9b64 | 349 | |
502bdf68 | 350 | int av_url_read_fpause(ByteIOContext *h, int pause); |
7f37f568 DB |
351 | int64_t av_url_read_fseek(ByteIOContext *h, int stream_index, |
352 | int64_t timestamp, int flags); | |
e7e4810a | 353 | |
f031df23 | 354 | #define URL_EOF (-1) |
c3316802 | 355 | /** @note return URL_EOF (-1) if EOF */ |
f031df23 | 356 | int url_fgetc(ByteIOContext *s); |
a8c5ab27 | 357 | |
c3316802 | 358 | /** @warning currently size is limited */ |
572f992e | 359 | #ifdef __GNUC__ |
08f29f82 | 360 | int url_fprintf(ByteIOContext *s, const char *fmt, ...) __attribute__ ((__format__ (__printf__, 2, 3))); |
572f992e MN |
361 | #else |
362 | int url_fprintf(ByteIOContext *s, const char *fmt, ...); | |
363 | #endif | |
a8c5ab27 | 364 | |
c3316802 | 365 | /** @note unlike fgets, the EOL character is not returned and a whole |
7f37f568 | 366 | line is parsed. return NULL if first char read was EOF */ |
f031df23 FB |
367 | char *url_fgets(ByteIOContext *s, char *buf, int buf_size); |
368 | ||
de6d9b64 FB |
369 | void put_flush_packet(ByteIOContext *s); |
370 | ||
4edfcecc MN |
371 | |
372 | /** | |
373 | * Reads size bytes from ByteIOContext into buf. | |
374 | * @returns number of bytes read or AVERROR | |
375 | */ | |
de6d9b64 | 376 | int get_buffer(ByteIOContext *s, unsigned char *buf, int size); |
4edfcecc MN |
377 | |
378 | /** | |
379 | * Reads size bytes from ByteIOContext into buf. | |
4477dedc | 380 | * This reads at most 1 packet. If that is not enough fewer bytes will be |
4edfcecc MN |
381 | * returned. |
382 | * @returns number of bytes read or AVERROR | |
383 | */ | |
e15dec10 | 384 | int get_partial_buffer(ByteIOContext *s, unsigned char *buf, int size); |
a8c5ab27 | 385 | |
c3316802 | 386 | /** @note return 0 if EOF, so you cannot use it if EOF handling is |
7f37f568 | 387 | necessary */ |
de6d9b64 | 388 | int get_byte(ByteIOContext *s); |
ea395e8c | 389 | unsigned int get_le24(ByteIOContext *s); |
de6d9b64 | 390 | unsigned int get_le32(ByteIOContext *s); |
0c1a9eda | 391 | uint64_t get_le64(ByteIOContext *s); |
de6d9b64 FB |
392 | unsigned int get_le16(ByteIOContext *s); |
393 | ||
3b4b29dc | 394 | char *get_strz(ByteIOContext *s, char *buf, int maxlen); |
de6d9b64 | 395 | unsigned int get_be16(ByteIOContext *s); |
a254c574 | 396 | unsigned int get_be24(ByteIOContext *s); |
de6d9b64 | 397 | unsigned int get_be32(ByteIOContext *s); |
0c1a9eda | 398 | uint64_t get_be64(ByteIOContext *s); |
de6d9b64 | 399 | |
7798b42d | 400 | uint64_t ff_get_v(ByteIOContext *bc); |
897d3eef | 401 | |
7ac13f0c | 402 | static inline int url_is_streamed(ByteIOContext *s) |
de6d9b64 FB |
403 | { |
404 | return s->is_streamed; | |
405 | } | |
de6d9b64 | 406 | |
4e38c094 SS |
407 | /** |
408 | * Creates and initializes a ByteIOContext for accessing the | |
409 | * resource referenced by the URLContext h. | |
410 | * @note When the URLContext h has been opened in read+write mode, the | |
411 | * ByteIOContext can be used only for writing. | |
412 | * | |
413 | * @param s Used to return the pointer to the created ByteIOContext. | |
414 | * In case of failure the pointed to value is set to NULL. | |
415 | * @return 0 in case of success, a negative value corresponding to an | |
416 | * AVERROR code in case of failure | |
417 | */ | |
899681cd | 418 | int url_fdopen(ByteIOContext **s, URLContext *h); |
a8c5ab27 | 419 | |
c3316802 | 420 | /** @warning must be called before any I/O */ |
de6d9b64 | 421 | int url_setbufsize(ByteIOContext *s, int buf_size); |
08580cb0 | 422 | #if LIBAVFORMAT_VERSION_MAJOR < 53 |
770d9daf BA |
423 | /** Reset the buffer for reading or writing. |
424 | * @note Will drop any data currently in the buffer without transmitting it. | |
425 | * @param flags URL_RDONLY to set up the buffer for reading, or URL_WRONLY | |
426 | * to set up the buffer for writing. */ | |
427 | int url_resetbuf(ByteIOContext *s, int flags); | |
08580cb0 | 428 | #endif |
a8c5ab27 | 429 | |
fe4fbb58 SS |
430 | /** |
431 | * Creates and initializes a ByteIOContext for accessing the | |
432 | * resource indicated by url. | |
433 | * @note When the resource indicated by url has been opened in | |
434 | * read+write mode, the ByteIOContext can be used only for writing. | |
435 | * | |
436 | * @param s Used to return the pointer to the created ByteIOContext. | |
437 | * In case of failure the pointed to value is set to NULL. | |
438 | * @param flags flags which control how the resource indicated by url | |
439 | * is to be opened | |
440 | * @return 0 in case of success, a negative value corresponding to an | |
441 | * AVERROR code in case of failure | |
442 | */ | |
725b3da9 | 443 | int url_fopen(ByteIOContext **s, const char *url, int flags); |
fe4fbb58 | 444 | |
de6d9b64 FB |
445 | int url_fclose(ByteIOContext *s); |
446 | URLContext *url_fileno(ByteIOContext *s); | |
a8c5ab27 | 447 | |
c3316802 | 448 | /** |
a8c5ab27 PI |
449 | * Return the maximum packet size associated to packetized buffered file |
450 | * handle. If the file is not packetized (stream like http or file on | |
451 | * disk), then 0 is returned. | |
452 | * | |
abfe87d4 | 453 | * @param s buffered file handle |
a8c5ab27 PI |
454 | * @return maximum packet size in bytes |
455 | */ | |
f031df23 | 456 | int url_fget_max_packet_size(ByteIOContext *s); |
de6d9b64 | 457 | |
899681cd | 458 | int url_open_buf(ByteIOContext **s, uint8_t *buf, int buf_size, int flags); |
a8c5ab27 | 459 | |
c3316802 | 460 | /** return the written or read size */ |
de6d9b64 FB |
461 | int url_close_buf(ByteIOContext *s); |
462 | ||
c3316802 | 463 | /** |
a8c5ab27 PI |
464 | * Open a write only memory stream. |
465 | * | |
466 | * @param s new IO context | |
467 | * @return zero if no error. | |
468 | */ | |
899681cd | 469 | int url_open_dyn_buf(ByteIOContext **s); |
a8c5ab27 | 470 | |
c3316802 | 471 | /** |
a8c5ab27 PI |
472 | * Open a write only packetized memory stream with a maximum packet |
473 | * size of 'max_packet_size'. The stream is stored in a memory buffer | |
474 | * with a big endian 4 byte header giving the packet size in bytes. | |
475 | * | |
476 | * @param s new IO context | |
477 | * @param max_packet_size maximum packet size (must be > 0) | |
478 | * @return zero if no error. | |
479 | */ | |
899681cd | 480 | int url_open_dyn_packet_buf(ByteIOContext **s, int max_packet_size); |
a8c5ab27 | 481 | |
c3316802 | 482 | /** |
a8c5ab27 PI |
483 | * Return the written size and a pointer to the buffer. The buffer |
484 | * must be freed with av_free(). | |
485 | * @param s IO context | |
e8b7c70f | 486 | * @param pbuffer pointer to a byte buffer |
a8c5ab27 PI |
487 | * @return the length of the byte buffer |
488 | */ | |
0c1a9eda | 489 | int url_close_dyn_buf(ByteIOContext *s, uint8_t **pbuffer); |
f031df23 | 490 | |
7f37f568 DB |
491 | unsigned long ff_crc04C11DB7_update(unsigned long checksum, const uint8_t *buf, |
492 | unsigned int len); | |
ee9f36a8 | 493 | unsigned long get_checksum(ByteIOContext *s); |
7f37f568 DB |
494 | void init_checksum(ByteIOContext *s, |
495 | unsigned long (*update_checksum)(unsigned long c, const uint8_t *p, unsigned int len), | |
496 | unsigned long checksum); | |
ee9f36a8 | 497 | |
de6d9b64 | 498 | /* udp.c */ |
f031df23 FB |
499 | int udp_set_remote_url(URLContext *h, const char *uri); |
500 | int udp_get_local_port(URLContext *h); | |
f0a80394 | 501 | #if (LIBAVFORMAT_VERSION_MAJOR <= 52) |
f031df23 | 502 | int udp_get_file_handle(URLContext *h); |
f0a80394 | 503 | #endif |
f031df23 | 504 | |
98790382 | 505 | #endif /* AVFORMAT_AVIO_H */ |