/src/ffmpeg/libavformat/avio.h
Line | Count | Source |
1 | | /* |
2 | | * copyright (c) 2001 Fabrice Bellard |
3 | | * |
4 | | * This file is part of FFmpeg. |
5 | | * |
6 | | * FFmpeg is free software; you can redistribute it and/or |
7 | | * modify it under the terms of the GNU Lesser General Public |
8 | | * License as published by the Free Software Foundation; either |
9 | | * version 2.1 of the License, or (at your option) any later version. |
10 | | * |
11 | | * FFmpeg is distributed in the hope that it will be useful, |
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 |
17 | | * License along with FFmpeg; if not, write to the Free Software |
18 | | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
19 | | */ |
20 | | #ifndef AVFORMAT_AVIO_H |
21 | | #define AVFORMAT_AVIO_H |
22 | | |
23 | | /** |
24 | | * @file |
25 | | * @ingroup lavf_io |
26 | | * Buffered I/O operations |
27 | | */ |
28 | | |
29 | | #include <stdint.h> |
30 | | #include <stdio.h> |
31 | | |
32 | | #include "libavutil/attributes.h" |
33 | | #include "libavutil/dict.h" |
34 | | #include "libavutil/log.h" |
35 | | |
36 | | #include "libavformat/version_major.h" |
37 | | |
38 | | /** |
39 | | * Seeking works like for a local file. |
40 | | */ |
41 | 0 | #define AVIO_SEEKABLE_NORMAL (1 << 0) |
42 | | |
43 | | /** |
44 | | * Seeking by timestamp with avio_seek_time() is possible. |
45 | | */ |
46 | 0 | #define AVIO_SEEKABLE_TIME (1 << 1) |
47 | | |
48 | | /** |
49 | | * Callback for checking whether to abort blocking functions. |
50 | | * AVERROR_EXIT is returned in this case by the interrupted |
51 | | * function. During blocking operations, callback is called with |
52 | | * opaque as parameter. If the callback returns 1, the |
53 | | * blocking operation will be aborted. |
54 | | * |
55 | | * No members can be added to this struct without a major bump, if |
56 | | * new elements have been added after this struct in AVFormatContext |
57 | | * or AVIOContext. |
58 | | */ |
59 | | typedef struct AVIOInterruptCB { |
60 | | int (*callback)(void*); |
61 | | void *opaque; |
62 | | } AVIOInterruptCB; |
63 | | |
64 | | /** |
65 | | * Directory entry types. |
66 | | */ |
67 | | enum AVIODirEntryType { |
68 | | AVIO_ENTRY_UNKNOWN, |
69 | | AVIO_ENTRY_BLOCK_DEVICE, |
70 | | AVIO_ENTRY_CHARACTER_DEVICE, |
71 | | AVIO_ENTRY_DIRECTORY, |
72 | | AVIO_ENTRY_NAMED_PIPE, |
73 | | AVIO_ENTRY_SYMBOLIC_LINK, |
74 | | AVIO_ENTRY_SOCKET, |
75 | | AVIO_ENTRY_FILE, |
76 | | AVIO_ENTRY_SERVER, |
77 | | AVIO_ENTRY_SHARE, |
78 | | AVIO_ENTRY_WORKGROUP, |
79 | | }; |
80 | | |
81 | | /** |
82 | | * Describes single entry of the directory. |
83 | | * |
84 | | * Only name and type fields are guaranteed be set. |
85 | | * Rest of fields are protocol or/and platform dependent and might be unknown. |
86 | | */ |
87 | | typedef struct AVIODirEntry { |
88 | | char *name; /**< Filename */ |
89 | | int type; /**< Type of the entry */ |
90 | | int utf8; /**< Set to 1 when name is encoded with UTF-8, 0 otherwise. |
91 | | Name can be encoded with UTF-8 even though 0 is set. */ |
92 | | int64_t size; /**< File size in bytes, -1 if unknown. */ |
93 | | int64_t modification_timestamp; /**< Time of last modification in microseconds since unix |
94 | | epoch, -1 if unknown. */ |
95 | | int64_t access_timestamp; /**< Time of last access in microseconds since unix epoch, |
96 | | -1 if unknown. */ |
97 | | int64_t status_change_timestamp; /**< Time of last status change in microseconds since unix |
98 | | epoch, -1 if unknown. */ |
99 | | int64_t user_id; /**< User ID of owner, -1 if unknown. */ |
100 | | int64_t group_id; /**< Group ID of owner, -1 if unknown. */ |
101 | | int64_t filemode; /**< Unix file mode, -1 if unknown. */ |
102 | | } AVIODirEntry; |
103 | | |
104 | | typedef struct AVIODirContext AVIODirContext; |
105 | | |
106 | | /** |
107 | | * Different data types that can be returned via the AVIO |
108 | | * write_data_type callback. |
109 | | */ |
110 | | enum AVIODataMarkerType { |
111 | | /** |
112 | | * Header data; this needs to be present for the stream to be decodeable. |
113 | | */ |
114 | | AVIO_DATA_MARKER_HEADER, |
115 | | /** |
116 | | * A point in the output bytestream where a decoder can start decoding |
117 | | * (i.e. a keyframe). A demuxer/decoder given the data flagged with |
118 | | * AVIO_DATA_MARKER_HEADER, followed by any AVIO_DATA_MARKER_SYNC_POINT, |
119 | | * should give decodeable results. |
120 | | */ |
121 | | AVIO_DATA_MARKER_SYNC_POINT, |
122 | | /** |
123 | | * A point in the output bytestream where a demuxer can start parsing |
124 | | * (for non self synchronizing bytestream formats). That is, any |
125 | | * non-keyframe packet start point. |
126 | | */ |
127 | | AVIO_DATA_MARKER_BOUNDARY_POINT, |
128 | | /** |
129 | | * This is any, unlabelled data. It can either be a muxer not marking |
130 | | * any positions at all, it can be an actual boundary/sync point |
131 | | * that the muxer chooses not to mark, or a later part of a packet/fragment |
132 | | * that is cut into multiple write callbacks due to limited IO buffer size. |
133 | | */ |
134 | | AVIO_DATA_MARKER_UNKNOWN, |
135 | | /** |
136 | | * Trailer data, which doesn't contain actual content, but only for |
137 | | * finalizing the output file. |
138 | | */ |
139 | | AVIO_DATA_MARKER_TRAILER, |
140 | | /** |
141 | | * A point in the output bytestream where the underlying AVIOContext might |
142 | | * flush the buffer depending on latency or buffering requirements. Typically |
143 | | * means the end of a packet. |
144 | | */ |
145 | | AVIO_DATA_MARKER_FLUSH_POINT, |
146 | | }; |
147 | | |
148 | | /** |
149 | | * Bytestream IO Context. |
150 | | * New public fields can be added with minor version bumps. |
151 | | * Removal, reordering and changes to existing public fields require |
152 | | * a major version bump. |
153 | | * sizeof(AVIOContext) must not be used outside libav*. |
154 | | * |
155 | | * @note None of the function pointers in AVIOContext should be called |
156 | | * directly, they should only be set by the client application |
157 | | * when implementing custom I/O. Normally these are set to the |
158 | | * function pointers specified in avio_alloc_context() |
159 | | */ |
160 | | typedef struct AVIOContext { |
161 | | /** |
162 | | * A class for private options. |
163 | | * |
164 | | * If this AVIOContext is created by avio_open2(), av_class is set and |
165 | | * passes the options down to protocols. |
166 | | * |
167 | | * If this AVIOContext is manually allocated, then av_class may be set by |
168 | | * the caller. |
169 | | * |
170 | | * warning -- this field can be NULL, be sure to not pass this AVIOContext |
171 | | * to any av_opt_* functions in that case. |
172 | | */ |
173 | | const AVClass *av_class; |
174 | | |
175 | | /* |
176 | | * The following shows the relationship between buffer, buf_ptr, |
177 | | * buf_ptr_max, buf_end, buf_size, and pos, when reading and when writing |
178 | | * (since AVIOContext is used for both): |
179 | | * |
180 | | ********************************************************************************** |
181 | | * READING |
182 | | ********************************************************************************** |
183 | | * |
184 | | * | buffer_size | |
185 | | * |---------------------------------------| |
186 | | * | | |
187 | | * |
188 | | * buffer buf_ptr buf_end |
189 | | * +---------------+-----------------------+ |
190 | | * |/ / / / / / / /|/ / / / / / /| | |
191 | | * read buffer: |/ / consumed / | to be read /| | |
192 | | * |/ / / / / / / /|/ / / / / / /| | |
193 | | * +---------------+-----------------------+ |
194 | | * |
195 | | * pos |
196 | | * +-------------------------------------------+-----------------+ |
197 | | * input file: | | | |
198 | | * +-------------------------------------------+-----------------+ |
199 | | * |
200 | | * |
201 | | ********************************************************************************** |
202 | | * WRITING |
203 | | ********************************************************************************** |
204 | | * |
205 | | * | buffer_size | |
206 | | * |--------------------------------------| |
207 | | * | | |
208 | | * |
209 | | * buf_ptr_max |
210 | | * buffer (buf_ptr) buf_end |
211 | | * +-----------------------+--------------+ |
212 | | * |/ / / / / / / / / / / /| | |
213 | | * write buffer: | / / to be flushed / / | | |
214 | | * |/ / / / / / / / / / / /| | |
215 | | * +-----------------------+--------------+ |
216 | | * buf_ptr can be in this |
217 | | * due to a backward seek |
218 | | * |
219 | | * pos |
220 | | * +-------------+----------------------------------------------+ |
221 | | * output file: | | | |
222 | | * +-------------+----------------------------------------------+ |
223 | | * |
224 | | */ |
225 | | unsigned char *buffer; /**< Start of the buffer. */ |
226 | | int buffer_size; /**< Maximum buffer size */ |
227 | | unsigned char *buf_ptr; /**< Current position in the buffer */ |
228 | | unsigned char *buf_end; /**< End of the data, may be less than |
229 | | buffer+buffer_size if the read function returned |
230 | | less data than requested, e.g. for streams where |
231 | | no more data has been received yet. */ |
232 | | void *opaque; /**< A private pointer, passed to the read/write/seek/... |
233 | | functions. */ |
234 | | int (*read_packet)(void *opaque, uint8_t *buf, int buf_size); |
235 | | int (*write_packet)(void *opaque, const uint8_t *buf, int buf_size); |
236 | | int64_t (*seek)(void *opaque, int64_t offset, int whence); |
237 | | int64_t pos; /**< position in the file of the current buffer */ |
238 | | int eof_reached; /**< true if was unable to read due to error or eof */ |
239 | | int error; /**< contains the error code or 0 if no error happened */ |
240 | | int write_flag; /**< true if open for writing */ |
241 | | int max_packet_size; |
242 | | int min_packet_size; /**< Try to buffer at least this amount of data |
243 | | before flushing it. */ |
244 | | unsigned long checksum; |
245 | | unsigned char *checksum_ptr; |
246 | | unsigned long (*update_checksum)(unsigned long checksum, const uint8_t *buf, unsigned int size); |
247 | | /** |
248 | | * Pause or resume playback for network streaming protocols - e.g. MMS. |
249 | | */ |
250 | | int (*read_pause)(void *opaque, int pause); |
251 | | /** |
252 | | * Seek to a given timestamp in stream with the specified stream_index. |
253 | | * Needed for some network streaming protocols which don't support seeking |
254 | | * to byte position. |
255 | | */ |
256 | | int64_t (*read_seek)(void *opaque, int stream_index, |
257 | | int64_t timestamp, int flags); |
258 | | /** |
259 | | * A combination of AVIO_SEEKABLE_ flags or 0 when the stream is not seekable. |
260 | | */ |
261 | | int seekable; |
262 | | |
263 | | /** |
264 | | * avio_read and avio_write should if possible be satisfied directly |
265 | | * instead of going through a buffer, and avio_seek will always |
266 | | * call the underlying seek function directly. |
267 | | */ |
268 | | int direct; |
269 | | |
270 | | /** |
271 | | * ',' separated list of allowed protocols. |
272 | | */ |
273 | | const char *protocol_whitelist; |
274 | | |
275 | | /** |
276 | | * ',' separated list of disallowed protocols. |
277 | | */ |
278 | | const char *protocol_blacklist; |
279 | | |
280 | | /** |
281 | | * A callback that is used instead of write_packet. |
282 | | */ |
283 | | int (*write_data_type)(void *opaque, const uint8_t *buf, int buf_size, |
284 | | enum AVIODataMarkerType type, int64_t time); |
285 | | /** |
286 | | * If set, don't call write_data_type separately for AVIO_DATA_MARKER_BOUNDARY_POINT, |
287 | | * but ignore them and treat them as AVIO_DATA_MARKER_UNKNOWN (to avoid needlessly |
288 | | * small chunks of data returned from the callback). |
289 | | */ |
290 | | int ignore_boundary_point; |
291 | | |
292 | | /** |
293 | | * Maximum reached position before a backward seek in the write buffer, |
294 | | * used keeping track of already written data for a later flush. |
295 | | */ |
296 | | unsigned char *buf_ptr_max; |
297 | | |
298 | | /** |
299 | | * Read-only statistic of bytes read for this AVIOContext. |
300 | | */ |
301 | | int64_t bytes_read; |
302 | | |
303 | | /** |
304 | | * Read-only statistic of bytes written for this AVIOContext. |
305 | | */ |
306 | | int64_t bytes_written; |
307 | | } AVIOContext; |
308 | | |
309 | | /** |
310 | | * Return the name of the protocol that will handle the passed URL. |
311 | | * |
312 | | * NULL is returned if no protocol could be found for the given URL. |
313 | | * |
314 | | * @return Name of the protocol or NULL. |
315 | | */ |
316 | | const char *avio_find_protocol_name(const char *url); |
317 | | |
318 | | /** |
319 | | * Return AVIO_FLAG_* access flags corresponding to the access permissions |
320 | | * of the resource in url, or a negative value corresponding to an |
321 | | * AVERROR code in case of failure. The returned access flags are |
322 | | * masked by the value in flags. |
323 | | * |
324 | | * @note This function is intrinsically unsafe, in the sense that the |
325 | | * checked resource may change its existence or permission status from |
326 | | * one call to another. Thus you should not trust the returned value, |
327 | | * unless you are sure that no other processes are accessing the |
328 | | * checked resource. |
329 | | */ |
330 | | int avio_check(const char *url, int flags); |
331 | | |
332 | | /** |
333 | | * Open directory for reading. |
334 | | * |
335 | | * @param s directory read context. Pointer to a NULL pointer must be passed. |
336 | | * @param url directory to be listed. |
337 | | * @param options A dictionary filled with protocol-private options. On return |
338 | | * this parameter will be destroyed and replaced with a dictionary |
339 | | * containing options that were not found. May be NULL. |
340 | | * @return >=0 on success or negative on error. |
341 | | */ |
342 | | int avio_open_dir(AVIODirContext **s, const char *url, AVDictionary **options); |
343 | | |
344 | | /** |
345 | | * Get next directory entry. |
346 | | * |
347 | | * Returned entry must be freed with avio_free_directory_entry(). In particular |
348 | | * it may outlive AVIODirContext. |
349 | | * |
350 | | * @param s directory read context. |
351 | | * @param[out] next next entry or NULL when no more entries. |
352 | | * @return >=0 on success or negative on error. End of list is not considered an |
353 | | * error. |
354 | | */ |
355 | | int avio_read_dir(AVIODirContext *s, AVIODirEntry **next); |
356 | | |
357 | | /** |
358 | | * Close directory. |
359 | | * |
360 | | * @note Entries created using avio_read_dir() are not deleted and must be |
361 | | * freeded with avio_free_directory_entry(). |
362 | | * |
363 | | * @param s directory read context. |
364 | | * @return >=0 on success or negative on error. |
365 | | */ |
366 | | int avio_close_dir(AVIODirContext **s); |
367 | | |
368 | | /** |
369 | | * Free entry allocated by avio_read_dir(). |
370 | | * |
371 | | * @param entry entry to be freed. |
372 | | */ |
373 | | void avio_free_directory_entry(AVIODirEntry **entry); |
374 | | |
375 | | /** |
376 | | * Allocate and initialize an AVIOContext for buffered I/O. It must be later |
377 | | * freed with avio_context_free(). |
378 | | * |
379 | | * @param buffer Memory block for input/output operations via AVIOContext. |
380 | | * The buffer must be allocated with av_malloc() and friends. |
381 | | * It may be freed and replaced with a new buffer by libavformat. |
382 | | * AVIOContext.buffer holds the buffer currently in use, |
383 | | * which must be later freed with av_free(). |
384 | | * @param buffer_size The buffer size is very important for performance. |
385 | | * For protocols with fixed blocksize it should be set to this blocksize. |
386 | | * For others a typical size is a cache page, e.g. 4kb. |
387 | | * @param write_flag Set to 1 if the buffer should be writable, 0 otherwise. |
388 | | * @param opaque An opaque pointer to user-specific data. |
389 | | * @param read_packet A function for refilling the buffer, may be NULL. |
390 | | * For stream protocols, must never return 0 but rather |
391 | | * a proper AVERROR code. |
392 | | * @param write_packet A function for writing the buffer contents, may be NULL. |
393 | | * The function may not change the input buffers content. |
394 | | * @param seek A function for seeking to specified byte position, may be NULL. |
395 | | * |
396 | | * @return Allocated AVIOContext or NULL on failure. |
397 | | */ |
398 | | AVIOContext *avio_alloc_context( |
399 | | unsigned char *buffer, |
400 | | int buffer_size, |
401 | | int write_flag, |
402 | | void *opaque, |
403 | | int (*read_packet)(void *opaque, uint8_t *buf, int buf_size), |
404 | | int (*write_packet)(void *opaque, const uint8_t *buf, int buf_size), |
405 | | int64_t (*seek)(void *opaque, int64_t offset, int whence)); |
406 | | |
407 | | /** |
408 | | * Free the supplied IO context and everything associated with it. |
409 | | * |
410 | | * @param s Double pointer to the IO context. This function will write NULL |
411 | | * into s. |
412 | | */ |
413 | | void avio_context_free(AVIOContext **s); |
414 | | |
415 | | void avio_w8(AVIOContext *s, int b); |
416 | | void avio_write(AVIOContext *s, const unsigned char *buf, int size); |
417 | | void avio_wl64(AVIOContext *s, uint64_t val); |
418 | | void avio_wb64(AVIOContext *s, uint64_t val); |
419 | | void avio_wl32(AVIOContext *s, unsigned int val); |
420 | | void avio_wb32(AVIOContext *s, unsigned int val); |
421 | | void avio_wl24(AVIOContext *s, unsigned int val); |
422 | | void avio_wb24(AVIOContext *s, unsigned int val); |
423 | | void avio_wl16(AVIOContext *s, unsigned int val); |
424 | | void avio_wb16(AVIOContext *s, unsigned int val); |
425 | | |
426 | | /** |
427 | | * Write a NULL-terminated string. |
428 | | * @return number of bytes written. |
429 | | */ |
430 | | int avio_put_str(AVIOContext *s, const char *str); |
431 | | |
432 | | /** |
433 | | * Convert an UTF-8 string to UTF-16LE and write it. |
434 | | * @param s the AVIOContext |
435 | | * @param str NULL-terminated UTF-8 string |
436 | | * |
437 | | * @return number of bytes written. |
438 | | */ |
439 | | int avio_put_str16le(AVIOContext *s, const char *str); |
440 | | |
441 | | /** |
442 | | * Convert an UTF-8 string to UTF-16BE and write it. |
443 | | * @param s the AVIOContext |
444 | | * @param str NULL-terminated UTF-8 string |
445 | | * |
446 | | * @return number of bytes written. |
447 | | */ |
448 | | int avio_put_str16be(AVIOContext *s, const char *str); |
449 | | |
450 | | /** |
451 | | * Mark the written bytestream as a specific type. |
452 | | * |
453 | | * Zero-length ranges are omitted from the output. |
454 | | * |
455 | | * @param s the AVIOContext |
456 | | * @param time the stream time the current bytestream pos corresponds to |
457 | | * (in AV_TIME_BASE units), or AV_NOPTS_VALUE if unknown or not |
458 | | * applicable |
459 | | * @param type the kind of data written starting at the current pos |
460 | | */ |
461 | | void avio_write_marker(AVIOContext *s, int64_t time, enum AVIODataMarkerType type); |
462 | | |
463 | | /** |
464 | | * Passing this as the "whence" parameter to a seek function causes it to |
465 | | * return the filesize without seeking anywhere. Supporting this is optional. |
466 | | * If it is not supported then the seek function will return <0. |
467 | | */ |
468 | 0 | #define AVSEEK_SIZE 0x10000 |
469 | | |
470 | | /** |
471 | | * OR'ing this flag into the "whence" parameter to a seek function causes it to |
472 | | * seek by any means (like reopening and linear reading) or other normally unreasonable |
473 | | * means that can be extremely slow. |
474 | | * This is the default and therefore ignored by the seek code since 2010. |
475 | | */ |
476 | 0 | #define AVSEEK_FORCE 0x20000 |
477 | | |
478 | | /** |
479 | | * fseek() equivalent for AVIOContext. |
480 | | * @return new position or AVERROR. |
481 | | */ |
482 | | int64_t avio_seek(AVIOContext *s, int64_t offset, int whence); |
483 | | |
484 | | /** |
485 | | * Skip given number of bytes forward |
486 | | * @return new position or AVERROR. |
487 | | */ |
488 | | int64_t avio_skip(AVIOContext *s, int64_t offset); |
489 | | |
490 | | /** |
491 | | * ftell() equivalent for AVIOContext. |
492 | | * @return position or AVERROR. |
493 | | */ |
494 | | static av_always_inline int64_t avio_tell(AVIOContext *s) |
495 | 0 | { |
496 | 0 | return avio_seek(s, 0, SEEK_CUR); |
497 | 0 | } Unexecuted instantiation: avformat.c:avio_tell Unexecuted instantiation: demux.c:avio_tell Unexecuted instantiation: demux_utils.c:avio_tell Unexecuted instantiation: format.c:avio_tell Unexecuted instantiation: id3v2.c:avio_tell Unexecuted instantiation: metadata.c:avio_tell Unexecuted instantiation: options.c:avio_tell Unexecuted instantiation: seek.c:avio_tell Unexecuted instantiation: url.c:avio_tell Unexecuted instantiation: utils.c:avio_tell Unexecuted instantiation: allformats.c:avio_tell Unexecuted instantiation: avio.c:avio_tell Unexecuted instantiation: aviobuf.c:avio_tell Unexecuted instantiation: id3v1.c:avio_tell Unexecuted instantiation: network.c:avio_tell Unexecuted instantiation: os_support.c:avio_tell Unexecuted instantiation: protocols.c:avio_tell |
498 | | |
499 | | /** |
500 | | * Get the filesize. |
501 | | * @return filesize or AVERROR |
502 | | */ |
503 | | int64_t avio_size(AVIOContext *s); |
504 | | |
505 | | /** |
506 | | * Similar to feof() but also returns nonzero on read errors. |
507 | | * @return non zero if and only if at end of file or a read error happened when reading. |
508 | | */ |
509 | | int avio_feof(AVIOContext *s); |
510 | | |
511 | | /** |
512 | | * Writes a formatted string to the context taking a va_list. |
513 | | * @return number of bytes written, < 0 on error. |
514 | | */ |
515 | | int avio_vprintf(AVIOContext *s, const char *fmt, va_list ap); |
516 | | |
517 | | /** |
518 | | * Writes a formatted string to the context. |
519 | | * @return number of bytes written, < 0 on error. |
520 | | */ |
521 | | int avio_printf(AVIOContext *s, const char *fmt, ...) av_printf_format(2, 3); |
522 | | |
523 | | /** |
524 | | * Write a NULL terminated array of strings to the context. |
525 | | * Usually you don't need to use this function directly but its macro wrapper, |
526 | | * avio_print. |
527 | | */ |
528 | | void avio_print_string_array(AVIOContext *s, const char * const strings[]); |
529 | | |
530 | | /** |
531 | | * Write strings (const char *) to the context. |
532 | | * This is a convenience macro around avio_print_string_array and it |
533 | | * automatically creates the string array from the variable argument list. |
534 | | * For simple string concatenations this function is more performant than using |
535 | | * avio_printf since it does not need a temporary buffer. |
536 | | */ |
537 | | #define avio_print(s, ...) \ |
538 | | avio_print_string_array(s, (const char*[]){__VA_ARGS__, NULL}) |
539 | | |
540 | | /** |
541 | | * Force flushing of buffered data. |
542 | | * |
543 | | * For write streams, force the buffered data to be immediately written to the output, |
544 | | * without to wait to fill the internal buffer. |
545 | | * |
546 | | * For read streams, discard all currently buffered data, and advance the |
547 | | * reported file position to that of the underlying stream. This does not |
548 | | * read new data, and does not perform any seeks. |
549 | | */ |
550 | | void avio_flush(AVIOContext *s); |
551 | | |
552 | | /** |
553 | | * Read size bytes from AVIOContext into buf. |
554 | | * @return number of bytes read or AVERROR |
555 | | */ |
556 | | int avio_read(AVIOContext *s, unsigned char *buf, int size); |
557 | | |
558 | | /** |
559 | | * Read size bytes from AVIOContext into buf. Unlike avio_read(), this is allowed |
560 | | * to read fewer bytes than requested. The missing bytes can be read in the next |
561 | | * call. This always tries to read at least 1 byte. |
562 | | * Useful to reduce latency in certain cases. |
563 | | * @return number of bytes read or AVERROR |
564 | | */ |
565 | | int avio_read_partial(AVIOContext *s, unsigned char *buf, int size); |
566 | | |
567 | | /** |
568 | | * @name Functions for reading from AVIOContext |
569 | | * @{ |
570 | | * |
571 | | * @note return 0 if EOF, so you cannot use it if EOF handling is |
572 | | * necessary |
573 | | */ |
574 | | int avio_r8 (AVIOContext *s); |
575 | | unsigned int avio_rl16(AVIOContext *s); |
576 | | unsigned int avio_rl24(AVIOContext *s); |
577 | | unsigned int avio_rl32(AVIOContext *s); |
578 | | uint64_t avio_rl64(AVIOContext *s); |
579 | | unsigned int avio_rb16(AVIOContext *s); |
580 | | unsigned int avio_rb24(AVIOContext *s); |
581 | | unsigned int avio_rb32(AVIOContext *s); |
582 | | uint64_t avio_rb64(AVIOContext *s); |
583 | | /** |
584 | | * @} |
585 | | */ |
586 | | |
587 | | /** |
588 | | * Read a string from pb into buf. The reading will terminate when either |
589 | | * a NULL character was encountered, maxlen bytes have been read, or nothing |
590 | | * more can be read from pb. The result is guaranteed to be NULL-terminated, it |
591 | | * will be truncated if buf is too small. |
592 | | * Note that the string is not interpreted or validated in any way, it |
593 | | * might get truncated in the middle of a sequence for multi-byte encodings. |
594 | | * |
595 | | * @return number of bytes read (is always <= maxlen). |
596 | | * If reading ends on EOF or error, the return value will be one more than |
597 | | * bytes actually read. |
598 | | */ |
599 | | int avio_get_str(AVIOContext *pb, int maxlen, char *buf, int buflen); |
600 | | |
601 | | /** |
602 | | * Read a UTF-16 string from pb and convert it to UTF-8. |
603 | | * The reading will terminate when either a null or invalid character was |
604 | | * encountered or maxlen bytes have been read. |
605 | | * @return number of bytes read (is always <= maxlen) |
606 | | */ |
607 | | int avio_get_str16le(AVIOContext *pb, int maxlen, char *buf, int buflen); |
608 | | int avio_get_str16be(AVIOContext *pb, int maxlen, char *buf, int buflen); |
609 | | |
610 | | |
611 | | /** |
612 | | * @name URL open modes |
613 | | * The flags argument to avio_open must be one of the following |
614 | | * constants, optionally ORed with other flags. |
615 | | * @{ |
616 | | */ |
617 | 1.36k | #define AVIO_FLAG_READ 1 /**< read-only */ |
618 | 1.36k | #define AVIO_FLAG_WRITE 2 /**< write-only */ |
619 | 0 | #define AVIO_FLAG_READ_WRITE (AVIO_FLAG_READ|AVIO_FLAG_WRITE) /**< read-write pseudo flag */ |
620 | | /** |
621 | | * @} |
622 | | */ |
623 | | |
624 | | /** |
625 | | * Use non-blocking mode. |
626 | | * If this flag is set, operations on the context will return |
627 | | * AVERROR(EAGAIN) if they can not be performed immediately. |
628 | | * If this flag is not set, operations on the context will never return |
629 | | * AVERROR(EAGAIN). |
630 | | * Note that this flag does not affect the opening/connecting of the |
631 | | * context. Connecting a protocol will always block if necessary (e.g. on |
632 | | * network protocols) but never hang (e.g. on busy devices). |
633 | | * Warning: non-blocking protocols is work-in-progress; this flag may be |
634 | | * silently ignored. |
635 | | */ |
636 | 0 | #define AVIO_FLAG_NONBLOCK 8 |
637 | | |
638 | | /** |
639 | | * Use direct mode. |
640 | | * avio_read and avio_write should if possible be satisfied directly |
641 | | * instead of going through a buffer, and avio_seek will always |
642 | | * call the underlying seek function directly. |
643 | | */ |
644 | 0 | #define AVIO_FLAG_DIRECT 0x8000 |
645 | | |
646 | | /** |
647 | | * Create and initialize a AVIOContext for accessing the |
648 | | * resource indicated by url. |
649 | | * @note When the resource indicated by url has been opened in |
650 | | * read+write mode, the AVIOContext can be used only for writing. |
651 | | * |
652 | | * @param s Used to return the pointer to the created AVIOContext. |
653 | | * In case of failure the pointed to value is set to NULL. |
654 | | * @param url resource to access |
655 | | * @param flags flags which control how the resource indicated by url |
656 | | * is to be opened |
657 | | * @return >= 0 in case of success, a negative value corresponding to an |
658 | | * AVERROR code in case of failure |
659 | | */ |
660 | | int avio_open(AVIOContext **s, const char *url, int flags); |
661 | | |
662 | | /** |
663 | | * Create and initialize a AVIOContext for accessing the |
664 | | * resource indicated by url. |
665 | | * @note When the resource indicated by url has been opened in |
666 | | * read+write mode, the AVIOContext can be used only for writing. |
667 | | * |
668 | | * @param s Used to return the pointer to the created AVIOContext. |
669 | | * In case of failure the pointed to value is set to NULL. |
670 | | * @param url resource to access |
671 | | * @param flags flags which control how the resource indicated by url |
672 | | * is to be opened |
673 | | * @param int_cb an interrupt callback to be used at the protocols level |
674 | | * @param options A dictionary filled with protocol-private options. On return |
675 | | * this parameter will be destroyed and replaced with a dict containing options |
676 | | * that were not found. May be NULL. |
677 | | * @return >= 0 in case of success, a negative value corresponding to an |
678 | | * AVERROR code in case of failure |
679 | | */ |
680 | | int avio_open2(AVIOContext **s, const char *url, int flags, |
681 | | const AVIOInterruptCB *int_cb, AVDictionary **options); |
682 | | |
683 | | /** |
684 | | * Close the resource accessed by the AVIOContext s and free it. |
685 | | * This function can only be used if s was opened by avio_open(). |
686 | | * |
687 | | * The internal buffer is automatically flushed before closing the |
688 | | * resource. |
689 | | * |
690 | | * @return 0 on success, an AVERROR < 0 on error. |
691 | | * @see avio_closep |
692 | | */ |
693 | | int avio_close(AVIOContext *s); |
694 | | |
695 | | /** |
696 | | * Close the resource accessed by the AVIOContext *s, free it |
697 | | * and set the pointer pointing to it to NULL. |
698 | | * This function can only be used if s was opened by avio_open(). |
699 | | * |
700 | | * The internal buffer is automatically flushed before closing the |
701 | | * resource. |
702 | | * |
703 | | * @return 0 on success, an AVERROR < 0 on error. |
704 | | * @see avio_close |
705 | | */ |
706 | | int avio_closep(AVIOContext **s); |
707 | | |
708 | | |
709 | | /** |
710 | | * Open a write only memory stream. |
711 | | * |
712 | | * @param s new IO context |
713 | | * @return zero if no error. |
714 | | */ |
715 | | int avio_open_dyn_buf(AVIOContext **s); |
716 | | |
717 | | /** |
718 | | * Return the written size and a pointer to the buffer. |
719 | | * The AVIOContext stream is left intact. |
720 | | * The buffer must NOT be freed. |
721 | | * No padding is added to the buffer. |
722 | | * |
723 | | * @param s IO context |
724 | | * @param pbuffer pointer to a byte buffer |
725 | | * @return the length of the byte buffer |
726 | | */ |
727 | | int avio_get_dyn_buf(AVIOContext *s, uint8_t **pbuffer); |
728 | | |
729 | | /** |
730 | | * Return the written size and a pointer to the buffer. The buffer |
731 | | * must be freed with av_free(). |
732 | | * Padding of AV_INPUT_BUFFER_PADDING_SIZE is added to the buffer. |
733 | | * |
734 | | * @param s IO context |
735 | | * @param pbuffer pointer to a byte buffer |
736 | | * @return the length of the byte buffer |
737 | | */ |
738 | | int avio_close_dyn_buf(AVIOContext *s, uint8_t **pbuffer); |
739 | | |
740 | | /** |
741 | | * Iterate through names of available protocols. |
742 | | * |
743 | | * @param opaque A private pointer representing current protocol. |
744 | | * It must be a pointer to NULL on first iteration and will |
745 | | * be updated by successive calls to avio_enum_protocols. |
746 | | * @param output If set to 1, iterate over output protocols, |
747 | | * otherwise over input protocols. |
748 | | * |
749 | | * @return A static string containing the name of current protocol or NULL |
750 | | */ |
751 | | const char *avio_enum_protocols(void **opaque, int output); |
752 | | |
753 | | /** |
754 | | * Get AVClass by names of available protocols. |
755 | | * |
756 | | * @return A AVClass of input protocol name or NULL |
757 | | */ |
758 | | const AVClass *avio_protocol_get_class(const char *name); |
759 | | |
760 | | /** |
761 | | * Pause and resume playing - only meaningful if using a network streaming |
762 | | * protocol (e.g. MMS). |
763 | | * |
764 | | * @param h IO context from which to call the read_pause function pointer |
765 | | * @param pause 1 for pause, 0 for resume |
766 | | */ |
767 | | int avio_pause(AVIOContext *h, int pause); |
768 | | |
769 | | /** |
770 | | * Seek to a given timestamp relative to some component stream. |
771 | | * Only meaningful if using a network streaming protocol (e.g. MMS.). |
772 | | * |
773 | | * @param h IO context from which to call the seek function pointers |
774 | | * @param stream_index The stream index that the timestamp is relative to. |
775 | | * If stream_index is (-1) the timestamp should be in AV_TIME_BASE |
776 | | * units from the beginning of the presentation. |
777 | | * If a stream_index >= 0 is used and the protocol does not support |
778 | | * seeking based on component streams, the call will fail. |
779 | | * @param timestamp timestamp in AVStream.time_base units |
780 | | * or if there is no stream specified then in AV_TIME_BASE units. |
781 | | * @param flags Optional combination of AVSEEK_FLAG_BACKWARD, AVSEEK_FLAG_BYTE |
782 | | * and AVSEEK_FLAG_ANY. The protocol may silently ignore |
783 | | * AVSEEK_FLAG_BACKWARD and AVSEEK_FLAG_ANY, but AVSEEK_FLAG_BYTE will |
784 | | * fail if used and not supported. |
785 | | * @return >= 0 on success |
786 | | * @see AVInputFormat::read_seek |
787 | | */ |
788 | | int64_t avio_seek_time(AVIOContext *h, int stream_index, |
789 | | int64_t timestamp, int flags); |
790 | | |
791 | | /* Avoid a warning. The header can not be included because it breaks c++. */ |
792 | | struct AVBPrint; |
793 | | |
794 | | /** |
795 | | * Read contents of h into print buffer, up to max_size bytes, or up to EOF. |
796 | | * |
797 | | * @return 0 for success (max_size bytes read or EOF reached), negative error |
798 | | * code otherwise |
799 | | */ |
800 | | int avio_read_to_bprint(AVIOContext *h, struct AVBPrint *pb, size_t max_size); |
801 | | |
802 | | /** |
803 | | * Accept and allocate a client context on a server context. |
804 | | * @param s the server context |
805 | | * @param c the client context, must be unallocated |
806 | | * @return >= 0 on success or a negative value corresponding |
807 | | * to an AVERROR on failure |
808 | | */ |
809 | | int avio_accept(AVIOContext *s, AVIOContext **c); |
810 | | |
811 | | /** |
812 | | * Perform one step of the protocol handshake to accept a new client. |
813 | | * This function must be called on a client returned by avio_accept() before |
814 | | * using it as a read/write context. |
815 | | * It is separate from avio_accept() because it may block. |
816 | | * A step of the handshake is defined by places where the application may |
817 | | * decide to change the proceedings. |
818 | | * For example, on a protocol with a request header and a reply header, each |
819 | | * one can constitute a step because the application may use the parameters |
820 | | * from the request to change parameters in the reply; or each individual |
821 | | * chunk of the request can constitute a step. |
822 | | * If the handshake is already finished, avio_handshake() does nothing and |
823 | | * returns 0 immediately. |
824 | | * |
825 | | * @param c the client context to perform the handshake on |
826 | | * @return 0 on a complete and successful handshake |
827 | | * > 0 if the handshake progressed, but is not complete |
828 | | * < 0 for an AVERROR code |
829 | | */ |
830 | | int avio_handshake(AVIOContext *c); |
831 | | #endif /* AVFORMAT_AVIO_H */ |