Make rtsp_set_callback() comments available to Doxygen
[libav.git] / libavformat / avio.h
CommitLineData
04d7f601
DB
1/*
2 * unbuffered io for ffmpeg system
3 * copyright (c) 2001 Fabrice Bellard
4 *
b78e7197
DB
5 * This file is part of FFmpeg.
6 *
7 * FFmpeg is free software; you can redistribute it and/or
04d7f601
DB
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
b78e7197 10 * version 2.1 of the License, or (at your option) any later version.
04d7f601 11 *
b78e7197 12 * FFmpeg is distributed in the hope that it will be useful,
04d7f601
DB
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
b78e7197 18 * License along with FFmpeg; if not, write to the Free Software
04d7f601
DB
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 */
f031df23
FB
21#ifndef AVIO_H
22#define AVIO_H
23
de6d9b64
FB
24/* output byte stream handling */
25
0c1a9eda 26typedef int64_t offset_t;
de6d9b64
FB
27
28/* unbuffered I/O */
29
30struct URLContext {
31 struct URLProtocol *prot;
115329f1 32 int flags;
de6d9b64 33 int is_streamed; /* true if streamed (no seek possible), default = false */
f031df23 34 int max_packet_size; /* if non zero, the stream is packetized with this max packet size */
de6d9b64 35 void *priv_data;
62181004
RB
36#if LIBAVFORMAT_VERSION_INT >= (52<<16)
37 char *filename; /* specified filename */
38#else
f746a046 39 char filename[1]; /* specified filename */
62181004 40#endif
de6d9b64
FB
41};
42
de6d9b64
FB
43typedef struct URLContext URLContext;
44
45typedef struct URLPollEntry {
46 URLContext *handle;
47 int events;
48 int revents;
49} URLPollEntry;
50
51#define URL_RDONLY 0
52#define URL_WRONLY 1
f031df23
FB
53#define URL_RDWR 2
54
019ac05a
FB
55typedef int URLInterruptCB(void);
56
de6d9b64
FB
57int url_open(URLContext **h, const char *filename, int flags);
58int url_read(URLContext *h, unsigned char *buf, int size);
59int url_write(URLContext *h, unsigned char *buf, int size);
60offset_t url_seek(URLContext *h, offset_t pos, int whence);
de6d9b64
FB
61int url_close(URLContext *h);
62int url_exist(const char *filename);
63offset_t url_filesize(URLContext *h);
f031df23 64int url_get_max_packet_size(URLContext *h);
f746a046
FB
65void url_get_filename(URLContext *h, char *buf, int buf_size);
66
019ac05a 67/* the callback is called in blocking functions to test regulary if
8fa36ae0
FR
68 asynchronous interruption is needed. AVERROR(EINTR) is returned
69 in this case by the interrupted function. 'NULL' means no interrupt
019ac05a
FB
70 callback is given. */
71void url_set_interrupt_cb(URLInterruptCB *interrupt_cb);
72
de6d9b64
FB
73/* not implemented */
74int url_poll(URLPollEntry *poll_table, int n, int timeout);
75
aa38b097
MN
76/**
77 * passing this as the "whence" parameter to a seek function causes it to
78 * return the filesize without seeking anywhere, supporting this is optional
79 * if its not supprted then the seek function will return <0
80 */
8e287af0
MN
81#define AVSEEK_SIZE 0x10000
82
de6d9b64
FB
83typedef struct URLProtocol {
84 const char *name;
85 int (*url_open)(URLContext *h, const char *filename, int flags);
86 int (*url_read)(URLContext *h, unsigned char *buf, int size);
87 int (*url_write)(URLContext *h, unsigned char *buf, int size);
88 offset_t (*url_seek)(URLContext *h, offset_t pos, int whence);
89 int (*url_close)(URLContext *h);
de6d9b64
FB
90 struct URLProtocol *next;
91} URLProtocol;
92
93extern URLProtocol *first_protocol;
019ac05a 94extern URLInterruptCB *url_interrupt_cb;
de6d9b64
FB
95
96int register_protocol(URLProtocol *protocol);
97
98typedef struct {
99 unsigned char *buffer;
100 int buffer_size;
101 unsigned char *buf_ptr, *buf_end;
102 void *opaque;
0c1a9eda 103 int (*read_packet)(void *opaque, uint8_t *buf, int buf_size);
576ae256 104 int (*write_packet)(void *opaque, uint8_t *buf, int buf_size);
536ffa59 105 offset_t (*seek)(void *opaque, offset_t offset, int whence);
de6d9b64
FB
106 offset_t pos; /* position in the file of the current buffer */
107 int must_flush; /* true if the next seek should flush */
108 int eof_reached; /* true if eof reached */
109 int write_flag; /* true if open for writing */
110 int is_streamed;
f031df23 111 int max_packet_size;
ee9f36a8
MN
112 unsigned long checksum;
113 unsigned char *checksum_ptr;
114 unsigned long (*update_checksum)(unsigned long checksum, const uint8_t *buf, unsigned int size);
576ae256 115 int error; ///< contains the error code or 0 if no error happened
de6d9b64
FB
116} ByteIOContext;
117
118int init_put_byte(ByteIOContext *s,
119 unsigned char *buffer,
120 int buffer_size,
121 int write_flag,
122 void *opaque,
0c1a9eda 123 int (*read_packet)(void *opaque, uint8_t *buf, int buf_size),
576ae256 124 int (*write_packet)(void *opaque, uint8_t *buf, int buf_size),
536ffa59 125 offset_t (*seek)(void *opaque, offset_t offset, int whence));
de6d9b64
FB
126
127void put_byte(ByteIOContext *s, int b);
75bdb984 128void put_buffer(ByteIOContext *s, const unsigned char *buf, int size);
0c1a9eda
ZK
129void put_le64(ByteIOContext *s, uint64_t val);
130void put_be64(ByteIOContext *s, uint64_t val);
de6d9b64
FB
131void put_le32(ByteIOContext *s, unsigned int val);
132void put_be32(ByteIOContext *s, unsigned int val);
ea395e8c 133void put_le24(ByteIOContext *s, unsigned int val);
a254c574 134void put_be24(ByteIOContext *s, unsigned int val);
de6d9b64
FB
135void put_le16(ByteIOContext *s, unsigned int val);
136void put_be16(ByteIOContext *s, unsigned int val);
0570bf06 137void put_tag(ByteIOContext *s, const char *tag);
de6d9b64 138
3b4b29dc 139void put_strz(ByteIOContext *s, const char *buf);
75bdb984 140
de6d9b64
FB
141offset_t url_fseek(ByteIOContext *s, offset_t offset, int whence);
142void url_fskip(ByteIOContext *s, offset_t offset);
143offset_t url_ftell(ByteIOContext *s);
a965c478 144offset_t url_fsize(ByteIOContext *s);
de6d9b64 145int url_feof(ByteIOContext *s);
576ae256 146int url_ferror(ByteIOContext *s);
de6d9b64 147
f031df23
FB
148#define URL_EOF (-1)
149int url_fgetc(ByteIOContext *s);
572f992e 150#ifdef __GNUC__
08f29f82 151int url_fprintf(ByteIOContext *s, const char *fmt, ...) __attribute__ ((__format__ (__printf__, 2, 3)));
572f992e
MN
152#else
153int url_fprintf(ByteIOContext *s, const char *fmt, ...);
154#endif
f031df23
FB
155char *url_fgets(ByteIOContext *s, char *buf, int buf_size);
156
de6d9b64
FB
157void put_flush_packet(ByteIOContext *s);
158
159int get_buffer(ByteIOContext *s, unsigned char *buf, int size);
e15dec10 160int get_partial_buffer(ByteIOContext *s, unsigned char *buf, int size);
de6d9b64 161int get_byte(ByteIOContext *s);
ea395e8c 162unsigned int get_le24(ByteIOContext *s);
de6d9b64 163unsigned int get_le32(ByteIOContext *s);
0c1a9eda 164uint64_t get_le64(ByteIOContext *s);
de6d9b64
FB
165unsigned int get_le16(ByteIOContext *s);
166
3b4b29dc 167char *get_strz(ByteIOContext *s, char *buf, int maxlen);
de6d9b64 168unsigned int get_be16(ByteIOContext *s);
a254c574 169unsigned int get_be24(ByteIOContext *s);
de6d9b64 170unsigned int get_be32(ByteIOContext *s);
0c1a9eda 171uint64_t get_be64(ByteIOContext *s);
de6d9b64 172
7ac13f0c 173static inline int url_is_streamed(ByteIOContext *s)
de6d9b64
FB
174{
175 return s->is_streamed;
176}
de6d9b64
FB
177
178int url_fdopen(ByteIOContext *s, URLContext *h);
179int url_setbufsize(ByteIOContext *s, int buf_size);
180int url_fopen(ByteIOContext *s, const char *filename, int flags);
181int url_fclose(ByteIOContext *s);
182URLContext *url_fileno(ByteIOContext *s);
f031df23 183int url_fget_max_packet_size(ByteIOContext *s);
de6d9b64 184
0c1a9eda 185int url_open_buf(ByteIOContext *s, uint8_t *buf, int buf_size, int flags);
de6d9b64
FB
186int url_close_buf(ByteIOContext *s);
187
f031df23
FB
188int url_open_dyn_buf(ByteIOContext *s);
189int url_open_dyn_packet_buf(ByteIOContext *s, int max_packet_size);
0c1a9eda 190int url_close_dyn_buf(ByteIOContext *s, uint8_t **pbuffer);
f031df23 191
ee9f36a8
MN
192unsigned long get_checksum(ByteIOContext *s);
193void init_checksum(ByteIOContext *s, unsigned long (*update_checksum)(unsigned long c, const uint8_t *p, unsigned int len), unsigned long checksum);
ee9f36a8 194
de6d9b64
FB
195/* file.c */
196extern URLProtocol file_protocol;
197extern URLProtocol pipe_protocol;
198
199/* udp.c */
200extern URLProtocol udp_protocol;
f031df23
FB
201int udp_set_remote_url(URLContext *h, const char *uri);
202int udp_get_local_port(URLContext *h);
203int udp_get_file_handle(URLContext *h);
204
205/* tcp.c */
206extern URLProtocol tcp_protocol;
de6d9b64
FB
207
208/* http.c */
209extern URLProtocol http_protocol;
f031df23
FB
210
211#endif
212