Mercurial > libavformat.hg
annotate avio.h @ 3754:8d267b43eaba libavformat
Move malloc() down until after all initializations, so that the resource is
only allocated if initialization worked. This means that on failure, we
don't have to deallocate it.
author | rbultje |
---|---|
date | Sat, 23 Aug 2008 18:46:30 +0000 |
parents | b140b68a3747 |
children | 1b6245500d8c |
rev | line source |
---|---|
1306
8bf9be9bb107
Add official LGPL license headers to the files that were missing them.
diego
parents:
1176
diff
changeset
|
1 /* |
8bf9be9bb107
Add official LGPL license headers to the files that were missing them.
diego
parents:
1176
diff
changeset
|
2 * unbuffered io for ffmpeg system |
8bf9be9bb107
Add official LGPL license headers to the files that were missing them.
diego
parents:
1176
diff
changeset
|
3 * copyright (c) 2001 Fabrice Bellard |
8bf9be9bb107
Add official LGPL license headers to the files that were missing them.
diego
parents:
1176
diff
changeset
|
4 * |
1358
0899bfe4105c
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
1306
diff
changeset
|
5 * This file is part of FFmpeg. |
0899bfe4105c
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
1306
diff
changeset
|
6 * |
0899bfe4105c
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
1306
diff
changeset
|
7 * FFmpeg is free software; you can redistribute it and/or |
1306
8bf9be9bb107
Add official LGPL license headers to the files that were missing them.
diego
parents:
1176
diff
changeset
|
8 * modify it under the terms of the GNU Lesser General Public |
8bf9be9bb107
Add official LGPL license headers to the files that were missing them.
diego
parents:
1176
diff
changeset
|
9 * License as published by the Free Software Foundation; either |
1358
0899bfe4105c
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
1306
diff
changeset
|
10 * version 2.1 of the License, or (at your option) any later version. |
1306
8bf9be9bb107
Add official LGPL license headers to the files that were missing them.
diego
parents:
1176
diff
changeset
|
11 * |
1358
0899bfe4105c
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
1306
diff
changeset
|
12 * FFmpeg is distributed in the hope that it will be useful, |
1306
8bf9be9bb107
Add official LGPL license headers to the files that were missing them.
diego
parents:
1176
diff
changeset
|
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
8bf9be9bb107
Add official LGPL license headers to the files that were missing them.
diego
parents:
1176
diff
changeset
|
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
8bf9be9bb107
Add official LGPL license headers to the files that were missing them.
diego
parents:
1176
diff
changeset
|
15 * Lesser General Public License for more details. |
8bf9be9bb107
Add official LGPL license headers to the files that were missing them.
diego
parents:
1176
diff
changeset
|
16 * |
8bf9be9bb107
Add official LGPL license headers to the files that were missing them.
diego
parents:
1176
diff
changeset
|
17 * You should have received a copy of the GNU Lesser General Public |
1358
0899bfe4105c
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
1306
diff
changeset
|
18 * License along with FFmpeg; if not, write to the Free Software |
1306
8bf9be9bb107
Add official LGPL license headers to the files that were missing them.
diego
parents:
1176
diff
changeset
|
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
8bf9be9bb107
Add official LGPL license headers to the files that were missing them.
diego
parents:
1176
diff
changeset
|
20 */ |
2620
792383dd085e
Add FFMPEG_ prefix to all multiple inclusion guards.
diego
parents:
2598
diff
changeset
|
21 #ifndef FFMPEG_AVIO_H |
792383dd085e
Add FFMPEG_ prefix to all multiple inclusion guards.
diego
parents:
2598
diff
changeset
|
22 #define FFMPEG_AVIO_H |
0 | 23 |
2171 | 24 #include <stdint.h> |
25 | |
0 | 26 /* output byte stream handling */ |
27 | |
65 | 28 typedef int64_t offset_t; |
0 | 29 |
30 /* unbuffered I/O */ | |
31 | |
2849
0182bdddc45e
Document ByteIOContext and URLContext change rules.
michael
parents:
2840
diff
changeset
|
32 /** |
0182bdddc45e
Document ByteIOContext and URLContext change rules.
michael
parents:
2840
diff
changeset
|
33 * URL Context. |
0182bdddc45e
Document ByteIOContext and URLContext change rules.
michael
parents:
2840
diff
changeset
|
34 * New fields can be added to the end with minor version bumps. |
2851 | 35 * Removal, reordering and changes to existing fields require a major |
2849
0182bdddc45e
Document ByteIOContext and URLContext change rules.
michael
parents:
2840
diff
changeset
|
36 * version bump. |
2851 | 37 * sizeof(URLContext) must not be used outside libav*. |
2849
0182bdddc45e
Document ByteIOContext and URLContext change rules.
michael
parents:
2840
diff
changeset
|
38 */ |
0 | 39 struct URLContext { |
3136
e38d5357f0d0
Add AVClass to URLContext at next major version bump
superdump
parents:
2853
diff
changeset
|
40 #if LIBAVFORMAT_VERSION_MAJOR >= 53 |
e38d5357f0d0
Add AVClass to URLContext at next major version bump
superdump
parents:
2853
diff
changeset
|
41 const AVClass *av_class; ///< information for av_log(). Set by url_open(). |
e38d5357f0d0
Add AVClass to URLContext at next major version bump
superdump
parents:
2853
diff
changeset
|
42 #endif |
0 | 43 struct URLProtocol *prot; |
885 | 44 int flags; |
1876
247fdf49ffb8
Convert all the comment sections into Doxygen compatible comments, same for
takis
parents:
1875
diff
changeset
|
45 int is_streamed; /**< true if streamed (no seek possible), default = false */ |
247fdf49ffb8
Convert all the comment sections into Doxygen compatible comments, same for
takis
parents:
1875
diff
changeset
|
46 int max_packet_size; /**< if non zero, the stream is packetized with this max packet size */ |
0 | 47 void *priv_data; |
1876
247fdf49ffb8
Convert all the comment sections into Doxygen compatible comments, same for
takis
parents:
1875
diff
changeset
|
48 char *filename; /**< specified filename */ |
0 | 49 }; |
50 | |
51 typedef struct URLContext URLContext; | |
52 | |
53 typedef struct URLPollEntry { | |
54 URLContext *handle; | |
55 int events; | |
56 int revents; | |
57 } URLPollEntry; | |
58 | |
59 #define URL_RDONLY 0 | |
60 #define URL_WRONLY 1 | |
61 #define URL_RDWR 2 | |
62 | |
177 | 63 typedef int URLInterruptCB(void); |
64 | |
3744
b140b68a3747
Implement url_open_protocol(), which is basiclly the former url_open()
rbultje
parents:
3198
diff
changeset
|
65 int url_open_protocol (URLContext **puc, struct URLProtocol *up, |
b140b68a3747
Implement url_open_protocol(), which is basiclly the former url_open()
rbultje
parents:
3198
diff
changeset
|
66 const char *filename, int flags); |
0 | 67 int url_open(URLContext **h, const char *filename, int flags); |
68 int url_read(URLContext *h, unsigned char *buf, int size); | |
69 int url_write(URLContext *h, unsigned char *buf, int size); | |
70 offset_t url_seek(URLContext *h, offset_t pos, int whence); | |
71 int url_close(URLContext *h); | |
72 int url_exist(const char *filename); | |
73 offset_t url_filesize(URLContext *h); | |
1875
84ed710a9adc
Move avio.h's url_get_max_packet_size() comment from source to header file.
takis
parents:
1874
diff
changeset
|
74 |
1876
247fdf49ffb8
Convert all the comment sections into Doxygen compatible comments, same for
takis
parents:
1875
diff
changeset
|
75 /** |
1875
84ed710a9adc
Move avio.h's url_get_max_packet_size() comment from source to header file.
takis
parents:
1874
diff
changeset
|
76 * Return the maximum packet size associated to packetized file |
2851 | 77 * handle. If the file is not packetized (stream like HTTP or file on |
1875
84ed710a9adc
Move avio.h's url_get_max_packet_size() comment from source to header file.
takis
parents:
1874
diff
changeset
|
78 * disk), then 0 is returned. |
84ed710a9adc
Move avio.h's url_get_max_packet_size() comment from source to header file.
takis
parents:
1874
diff
changeset
|
79 * |
84ed710a9adc
Move avio.h's url_get_max_packet_size() comment from source to header file.
takis
parents:
1874
diff
changeset
|
80 * @param h file handle |
84ed710a9adc
Move avio.h's url_get_max_packet_size() comment from source to header file.
takis
parents:
1874
diff
changeset
|
81 * @return maximum packet size in bytes |
84ed710a9adc
Move avio.h's url_get_max_packet_size() comment from source to header file.
takis
parents:
1874
diff
changeset
|
82 */ |
0 | 83 int url_get_max_packet_size(URLContext *h); |
19 | 84 void url_get_filename(URLContext *h, char *buf, int buf_size); |
85 | |
1876
247fdf49ffb8
Convert all the comment sections into Doxygen compatible comments, same for
takis
parents:
1875
diff
changeset
|
86 /** |
2851 | 87 * The callback is called in blocking functions to test regulary if |
1876
247fdf49ffb8
Convert all the comment sections into Doxygen compatible comments, same for
takis
parents:
1875
diff
changeset
|
88 * asynchronous interruption is needed. AVERROR(EINTR) is returned |
247fdf49ffb8
Convert all the comment sections into Doxygen compatible comments, same for
takis
parents:
1875
diff
changeset
|
89 * in this case by the interrupted function. 'NULL' means no interrupt |
2851 | 90 * callback is given. |
1876
247fdf49ffb8
Convert all the comment sections into Doxygen compatible comments, same for
takis
parents:
1875
diff
changeset
|
91 */ |
177 | 92 void url_set_interrupt_cb(URLInterruptCB *interrupt_cb); |
93 | |
0 | 94 /* not implemented */ |
95 int url_poll(URLPollEntry *poll_table, int n, int timeout); | |
96 | |
2839
b51319dd86e5
Merge recently added and still unused play and pause functions.
michael
parents:
2834
diff
changeset
|
97 /** |
b51319dd86e5
Merge recently added and still unused play and pause functions.
michael
parents:
2834
diff
changeset
|
98 * Pause and resume playing - only meaningful if using a network streaming |
b51319dd86e5
Merge recently added and still unused play and pause functions.
michael
parents:
2834
diff
changeset
|
99 * protocol (e.g. MMS). |
b51319dd86e5
Merge recently added and still unused play and pause functions.
michael
parents:
2834
diff
changeset
|
100 * @param pause 1 for pause, 0 for resume |
b51319dd86e5
Merge recently added and still unused play and pause functions.
michael
parents:
2834
diff
changeset
|
101 */ |
b51319dd86e5
Merge recently added and still unused play and pause functions.
michael
parents:
2834
diff
changeset
|
102 int av_url_read_pause(URLContext *h, int pause); |
2851 | 103 |
2778
50e2307414ee
Extend URLProtocol with new function pointers and api functions for
andoma
parents:
2771
diff
changeset
|
104 /** |
50e2307414ee
Extend URLProtocol with new function pointers and api functions for
andoma
parents:
2771
diff
changeset
|
105 * Seek to a given timestamp relative to some component stream. |
2851 | 106 * Only meaningful if using a network streaming protocol (e.g. MMS.). |
2778
50e2307414ee
Extend URLProtocol with new function pointers and api functions for
andoma
parents:
2771
diff
changeset
|
107 * @param stream_index The stream index that the timestamp is relative to. |
50e2307414ee
Extend URLProtocol with new function pointers and api functions for
andoma
parents:
2771
diff
changeset
|
108 * If stream_index is (-1) the timestamp should be in AV_TIME_BASE |
50e2307414ee
Extend URLProtocol with new function pointers and api functions for
andoma
parents:
2771
diff
changeset
|
109 * units from the beginning of the presentation. |
50e2307414ee
Extend URLProtocol with new function pointers and api functions for
andoma
parents:
2771
diff
changeset
|
110 * If a stream_index >= 0 is used and the protocol does not support |
50e2307414ee
Extend URLProtocol with new function pointers and api functions for
andoma
parents:
2771
diff
changeset
|
111 * seeking based on component streams, the call will fail with ENOTSUP. |
2852 | 112 * @param timestamp timestamp in AVStream.time_base units |
2778
50e2307414ee
Extend URLProtocol with new function pointers and api functions for
andoma
parents:
2771
diff
changeset
|
113 * or if there is no stream specified then in AV_TIME_BASE units. |
50e2307414ee
Extend URLProtocol with new function pointers and api functions for
andoma
parents:
2771
diff
changeset
|
114 * @param flags Optional combination of AVSEEK_FLAG_BACKWARD, AVSEEK_FLAG_BYTE |
50e2307414ee
Extend URLProtocol with new function pointers and api functions for
andoma
parents:
2771
diff
changeset
|
115 * and AVSEEK_FLAG_ANY. The protocol may silently ignore |
50e2307414ee
Extend URLProtocol with new function pointers and api functions for
andoma
parents:
2771
diff
changeset
|
116 * AVSEEK_FLAG_BACKWARD and AVSEEK_FLAG_ANY, but AVSEEK_FLAG_BYTE will |
50e2307414ee
Extend URLProtocol with new function pointers and api functions for
andoma
parents:
2771
diff
changeset
|
117 * fail with ENOTSUP if used and not supported. |
50e2307414ee
Extend URLProtocol with new function pointers and api functions for
andoma
parents:
2771
diff
changeset
|
118 * @return >= 0 on success |
50e2307414ee
Extend URLProtocol with new function pointers and api functions for
andoma
parents:
2771
diff
changeset
|
119 * @see AVInputFormat::read_seek |
50e2307414ee
Extend URLProtocol with new function pointers and api functions for
andoma
parents:
2771
diff
changeset
|
120 */ |
2840
f51675f78402
Make recently added and still unused read_seek functions return offset_t.
michael
parents:
2839
diff
changeset
|
121 offset_t av_url_read_seek(URLContext *h, |
2778
50e2307414ee
Extend URLProtocol with new function pointers and api functions for
andoma
parents:
2771
diff
changeset
|
122 int stream_index, int64_t timestamp, int flags); |
50e2307414ee
Extend URLProtocol with new function pointers and api functions for
andoma
parents:
2771
diff
changeset
|
123 |
1614 | 124 /** |
2165 | 125 * Passing this as the "whence" parameter to a seek function causes it to |
126 * return the filesize without seeking anywhere. Supporting this is optional. | |
127 * If it is not supported then the seek function will return <0. | |
1614 | 128 */ |
1612
a6eaa0762191
seekless filesize retrieving support in 7 lines of code, also doesnt break compatibility
michael
parents:
1358
diff
changeset
|
129 #define AVSEEK_SIZE 0x10000 |
a6eaa0762191
seekless filesize retrieving support in 7 lines of code, also doesnt break compatibility
michael
parents:
1358
diff
changeset
|
130 |
0 | 131 typedef struct URLProtocol { |
132 const char *name; | |
133 int (*url_open)(URLContext *h, const char *filename, int flags); | |
134 int (*url_read)(URLContext *h, unsigned char *buf, int size); | |
135 int (*url_write)(URLContext *h, unsigned char *buf, int size); | |
136 offset_t (*url_seek)(URLContext *h, offset_t pos, int whence); | |
137 int (*url_close)(URLContext *h); | |
138 struct URLProtocol *next; | |
2839
b51319dd86e5
Merge recently added and still unused play and pause functions.
michael
parents:
2834
diff
changeset
|
139 int (*url_read_pause)(URLContext *h, int pause); |
2840
f51675f78402
Make recently added and still unused read_seek functions return offset_t.
michael
parents:
2839
diff
changeset
|
140 offset_t (*url_read_seek)(URLContext *h, |
2778
50e2307414ee
Extend URLProtocol with new function pointers and api functions for
andoma
parents:
2771
diff
changeset
|
141 int stream_index, int64_t timestamp, int flags); |
0 | 142 } URLProtocol; |
143 | |
144 extern URLProtocol *first_protocol; | |
177 | 145 extern URLInterruptCB *url_interrupt_cb; |
0 | 146 |
2812 | 147 URLProtocol *av_protocol_next(URLProtocol *p); |
148 | |
0 | 149 int register_protocol(URLProtocol *protocol); |
150 | |
2849
0182bdddc45e
Document ByteIOContext and URLContext change rules.
michael
parents:
2840
diff
changeset
|
151 /** |
0182bdddc45e
Document ByteIOContext and URLContext change rules.
michael
parents:
2840
diff
changeset
|
152 * Bytestream IO Context. |
0182bdddc45e
Document ByteIOContext and URLContext change rules.
michael
parents:
2840
diff
changeset
|
153 * New fields can be added to the end with minor version bumps. |
2851 | 154 * Removal, reordering and changes to existing fields require a major |
2849
0182bdddc45e
Document ByteIOContext and URLContext change rules.
michael
parents:
2840
diff
changeset
|
155 * version bump. |
2851 | 156 * sizeof(ByteIOContext) must not be used outside libav*. |
2849
0182bdddc45e
Document ByteIOContext and URLContext change rules.
michael
parents:
2840
diff
changeset
|
157 */ |
0 | 158 typedef struct { |
159 unsigned char *buffer; | |
160 int buffer_size; | |
161 unsigned char *buf_ptr, *buf_end; | |
162 void *opaque; | |
65 | 163 int (*read_packet)(void *opaque, uint8_t *buf, int buf_size); |
554 | 164 int (*write_packet)(void *opaque, uint8_t *buf, int buf_size); |
778
4fbe04f998bf
Fix url_fsize for large files patch by (Wolfram Gloger: wmglo, dent med uni-muenchen de)
michael
parents:
764
diff
changeset
|
165 offset_t (*seek)(void *opaque, offset_t offset, int whence); |
1876
247fdf49ffb8
Convert all the comment sections into Doxygen compatible comments, same for
takis
parents:
1875
diff
changeset
|
166 offset_t pos; /**< position in the file of the current buffer */ |
247fdf49ffb8
Convert all the comment sections into Doxygen compatible comments, same for
takis
parents:
1875
diff
changeset
|
167 int must_flush; /**< true if the next seek should flush */ |
247fdf49ffb8
Convert all the comment sections into Doxygen compatible comments, same for
takis
parents:
1875
diff
changeset
|
168 int eof_reached; /**< true if eof reached */ |
247fdf49ffb8
Convert all the comment sections into Doxygen compatible comments, same for
takis
parents:
1875
diff
changeset
|
169 int write_flag; /**< true if open for writing */ |
0 | 170 int is_streamed; |
171 int max_packet_size; | |
418
41da3366d341
checksuming for nut & nice checksum API for libavformat
michael
parents:
389
diff
changeset
|
172 unsigned long checksum; |
41da3366d341
checksuming for nut & nice checksum API for libavformat
michael
parents:
389
diff
changeset
|
173 unsigned char *checksum_ptr; |
41da3366d341
checksuming for nut & nice checksum API for libavformat
michael
parents:
389
diff
changeset
|
174 unsigned long (*update_checksum)(unsigned long checksum, const uint8_t *buf, unsigned int size); |
554 | 175 int error; ///< contains the error code or 0 if no error happened |
2839
b51319dd86e5
Merge recently added and still unused play and pause functions.
michael
parents:
2834
diff
changeset
|
176 int (*read_pause)(void *opaque, int pause); |
2840
f51675f78402
Make recently added and still unused read_seek functions return offset_t.
michael
parents:
2839
diff
changeset
|
177 offset_t (*read_seek)(void *opaque, |
2783
1a9db30c1d1c
Extend ByteIOContext and add the buffered IO functions:
andoma
parents:
2778
diff
changeset
|
178 int stream_index, int64_t timestamp, int flags); |
0 | 179 } ByteIOContext; |
180 | |
181 int init_put_byte(ByteIOContext *s, | |
182 unsigned char *buffer, | |
183 int buffer_size, | |
184 int write_flag, | |
185 void *opaque, | |
65 | 186 int (*read_packet)(void *opaque, uint8_t *buf, int buf_size), |
554 | 187 int (*write_packet)(void *opaque, uint8_t *buf, int buf_size), |
778
4fbe04f998bf
Fix url_fsize for large files patch by (Wolfram Gloger: wmglo, dent med uni-muenchen de)
michael
parents:
764
diff
changeset
|
188 offset_t (*seek)(void *opaque, offset_t offset, int whence)); |
2853 | 189 ByteIOContext *av_alloc_put_byte( |
190 unsigned char *buffer, | |
191 int buffer_size, | |
192 int write_flag, | |
193 void *opaque, | |
194 int (*read_packet)(void *opaque, uint8_t *buf, int buf_size), | |
195 int (*write_packet)(void *opaque, uint8_t *buf, int buf_size), | |
196 offset_t (*seek)(void *opaque, offset_t offset, int whence)); | |
0 | 197 |
198 void put_byte(ByteIOContext *s, int b); | |
199 void put_buffer(ByteIOContext *s, const unsigned char *buf, int size); | |
65 | 200 void put_le64(ByteIOContext *s, uint64_t val); |
201 void put_be64(ByteIOContext *s, uint64_t val); | |
0 | 202 void put_le32(ByteIOContext *s, unsigned int val); |
203 void put_be32(ByteIOContext *s, unsigned int val); | |
937 | 204 void put_le24(ByteIOContext *s, unsigned int val); |
822 | 205 void put_be24(ByteIOContext *s, unsigned int val); |
0 | 206 void put_le16(ByteIOContext *s, unsigned int val); |
207 void put_be16(ByteIOContext *s, unsigned int val); | |
208 void put_tag(ByteIOContext *s, const char *tag); | |
209 | |
210 void put_strz(ByteIOContext *s, const char *buf); | |
211 | |
3168 | 212 /** |
213 * fseek() equivalent for ByteIOContext. | |
214 * @return new position or AVERROR. | |
215 */ | |
0 | 216 offset_t url_fseek(ByteIOContext *s, offset_t offset, int whence); |
3168 | 217 |
218 /** | |
219 * Skip given number of bytes forward. | |
220 * @param offset number of bytes | |
221 */ | |
0 | 222 void url_fskip(ByteIOContext *s, offset_t offset); |
3168 | 223 |
224 /** | |
225 * ftell() equivalent for ByteIOContext. | |
226 * @return position or AVERROR. | |
227 */ | |
0 | 228 offset_t url_ftell(ByteIOContext *s); |
3168 | 229 |
230 /** | |
231 * Gets the filesize. | |
232 * @return filesize or AVERROR | |
233 */ | |
764
cdb845a57ae4
drop most url_fileno() calls (allows to use ByteIOContext directly in caller apps instead of URLProtocol)
aurel
parents:
554
diff
changeset
|
234 offset_t url_fsize(ByteIOContext *s); |
3168 | 235 |
236 /** | |
237 * feof() equivalent for ByteIOContext. | |
238 * @return non zero if and only if end of file | |
239 */ | |
0 | 240 int url_feof(ByteIOContext *s); |
3168 | 241 |
554 | 242 int url_ferror(ByteIOContext *s); |
0 | 243 |
2839
b51319dd86e5
Merge recently added and still unused play and pause functions.
michael
parents:
2834
diff
changeset
|
244 int av_url_read_fpause(ByteIOContext *h, int pause); |
2840
f51675f78402
Make recently added and still unused read_seek functions return offset_t.
michael
parents:
2839
diff
changeset
|
245 offset_t av_url_read_fseek(ByteIOContext *h, |
2783
1a9db30c1d1c
Extend ByteIOContext and add the buffered IO functions:
andoma
parents:
2778
diff
changeset
|
246 int stream_index, int64_t timestamp, int flags); |
1a9db30c1d1c
Extend ByteIOContext and add the buffered IO functions:
andoma
parents:
2778
diff
changeset
|
247 |
0 | 248 #define URL_EOF (-1) |
1876
247fdf49ffb8
Convert all the comment sections into Doxygen compatible comments, same for
takis
parents:
1875
diff
changeset
|
249 /** @note return URL_EOF (-1) if EOF */ |
0 | 250 int url_fgetc(ByteIOContext *s); |
1874
3328f652d741
Move aviobuf.c comments to avio.h. By moving the aviobuf.c comments to avio.h,
takis
parents:
1787
diff
changeset
|
251 |
1876
247fdf49ffb8
Convert all the comment sections into Doxygen compatible comments, same for
takis
parents:
1875
diff
changeset
|
252 /** @warning currently size is limited */ |
206
3a493a2e5bba
libavformat/avio.h compilation problem in VisualC++ by (lethean at realtime dot ssu dot ac dot kr)
michaelni
parents:
177
diff
changeset
|
253 #ifdef __GNUC__ |
265
786e8286ea4a
Patch for attribute(printf) by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michaelni
parents:
206
diff
changeset
|
254 int url_fprintf(ByteIOContext *s, const char *fmt, ...) __attribute__ ((__format__ (__printf__, 2, 3))); |
206
3a493a2e5bba
libavformat/avio.h compilation problem in VisualC++ by (lethean at realtime dot ssu dot ac dot kr)
michaelni
parents:
177
diff
changeset
|
255 #else |
3a493a2e5bba
libavformat/avio.h compilation problem in VisualC++ by (lethean at realtime dot ssu dot ac dot kr)
michaelni
parents:
177
diff
changeset
|
256 int url_fprintf(ByteIOContext *s, const char *fmt, ...); |
3a493a2e5bba
libavformat/avio.h compilation problem in VisualC++ by (lethean at realtime dot ssu dot ac dot kr)
michaelni
parents:
177
diff
changeset
|
257 #endif |
1874
3328f652d741
Move aviobuf.c comments to avio.h. By moving the aviobuf.c comments to avio.h,
takis
parents:
1787
diff
changeset
|
258 |
1876
247fdf49ffb8
Convert all the comment sections into Doxygen compatible comments, same for
takis
parents:
1875
diff
changeset
|
259 /** @note unlike fgets, the EOL character is not returned and a whole |
1874
3328f652d741
Move aviobuf.c comments to avio.h. By moving the aviobuf.c comments to avio.h,
takis
parents:
1787
diff
changeset
|
260 line is parsed. return NULL if first char read was EOF */ |
0 | 261 char *url_fgets(ByteIOContext *s, char *buf, int buf_size); |
262 | |
263 void put_flush_packet(ByteIOContext *s); | |
264 | |
3174 | 265 |
266 /** | |
267 * Reads size bytes from ByteIOContext into buf. | |
268 * @returns number of bytes read or AVERROR | |
269 */ | |
0 | 270 int get_buffer(ByteIOContext *s, unsigned char *buf, int size); |
3174 | 271 |
272 /** | |
273 * Reads size bytes from ByteIOContext into buf. | |
3198 | 274 * This reads at most 1 packet. If that is not enough fewer bytes will be |
3174 | 275 * returned. |
276 * @returns number of bytes read or AVERROR | |
277 */ | |
389
e14fcd57ad2f
decode latency patch by (Leon van Stuivenberg <l dot vanstuivenberg at chello dot nl>)
michael
parents:
265
diff
changeset
|
278 int get_partial_buffer(ByteIOContext *s, unsigned char *buf, int size); |
1874
3328f652d741
Move aviobuf.c comments to avio.h. By moving the aviobuf.c comments to avio.h,
takis
parents:
1787
diff
changeset
|
279 |
1876
247fdf49ffb8
Convert all the comment sections into Doxygen compatible comments, same for
takis
parents:
1875
diff
changeset
|
280 /** @note return 0 if EOF, so you cannot use it if EOF handling is |
1874
3328f652d741
Move aviobuf.c comments to avio.h. By moving the aviobuf.c comments to avio.h,
takis
parents:
1787
diff
changeset
|
281 necessary */ |
0 | 282 int get_byte(ByteIOContext *s); |
937 | 283 unsigned int get_le24(ByteIOContext *s); |
0 | 284 unsigned int get_le32(ByteIOContext *s); |
65 | 285 uint64_t get_le64(ByteIOContext *s); |
0 | 286 unsigned int get_le16(ByteIOContext *s); |
287 | |
288 char *get_strz(ByteIOContext *s, char *buf, int maxlen); | |
289 unsigned int get_be16(ByteIOContext *s); | |
822 | 290 unsigned int get_be24(ByteIOContext *s); |
0 | 291 unsigned int get_be32(ByteIOContext *s); |
65 | 292 uint64_t get_be64(ByteIOContext *s); |
0 | 293 |
2700 | 294 uint64_t ff_get_v(ByteIOContext *bc); |
2699 | 295 |
0 | 296 static inline int url_is_streamed(ByteIOContext *s) |
297 { | |
298 return s->is_streamed; | |
299 } | |
300 | |
2582 | 301 /** @note when opened as read/write, the buffers are only used for |
302 writing */ | |
2771
d52c718e83f9
Use dynamically allocated ByteIOContext in AVFormatContext
andoma
parents:
2748
diff
changeset
|
303 int url_fdopen(ByteIOContext **s, URLContext *h); |
1874
3328f652d741
Move aviobuf.c comments to avio.h. By moving the aviobuf.c comments to avio.h,
takis
parents:
1787
diff
changeset
|
304 |
1876
247fdf49ffb8
Convert all the comment sections into Doxygen compatible comments, same for
takis
parents:
1875
diff
changeset
|
305 /** @warning must be called before any I/O */ |
0 | 306 int url_setbufsize(ByteIOContext *s, int buf_size); |
2598
fc7f8ee4700b
Add functionality to set the direction of a ByteIOContext buffer.
benoit
parents:
2582
diff
changeset
|
307 /** Reset the buffer for reading or writing. |
fc7f8ee4700b
Add functionality to set the direction of a ByteIOContext buffer.
benoit
parents:
2582
diff
changeset
|
308 * @note Will drop any data currently in the buffer without transmitting it. |
fc7f8ee4700b
Add functionality to set the direction of a ByteIOContext buffer.
benoit
parents:
2582
diff
changeset
|
309 * @param flags URL_RDONLY to set up the buffer for reading, or URL_WRONLY |
fc7f8ee4700b
Add functionality to set the direction of a ByteIOContext buffer.
benoit
parents:
2582
diff
changeset
|
310 * to set up the buffer for writing. */ |
fc7f8ee4700b
Add functionality to set the direction of a ByteIOContext buffer.
benoit
parents:
2582
diff
changeset
|
311 int url_resetbuf(ByteIOContext *s, int flags); |
1874
3328f652d741
Move aviobuf.c comments to avio.h. By moving the aviobuf.c comments to avio.h,
takis
parents:
1787
diff
changeset
|
312 |
1876
247fdf49ffb8
Convert all the comment sections into Doxygen compatible comments, same for
takis
parents:
1875
diff
changeset
|
313 /** @note when opened as read/write, the buffers are only used for |
2582 | 314 writing */ |
2771
d52c718e83f9
Use dynamically allocated ByteIOContext in AVFormatContext
andoma
parents:
2748
diff
changeset
|
315 int url_fopen(ByteIOContext **s, const char *filename, int flags); |
0 | 316 int url_fclose(ByteIOContext *s); |
317 URLContext *url_fileno(ByteIOContext *s); | |
1874
3328f652d741
Move aviobuf.c comments to avio.h. By moving the aviobuf.c comments to avio.h,
takis
parents:
1787
diff
changeset
|
318 |
1876
247fdf49ffb8
Convert all the comment sections into Doxygen compatible comments, same for
takis
parents:
1875
diff
changeset
|
319 /** |
1874
3328f652d741
Move aviobuf.c comments to avio.h. By moving the aviobuf.c comments to avio.h,
takis
parents:
1787
diff
changeset
|
320 * Return the maximum packet size associated to packetized buffered file |
3328f652d741
Move aviobuf.c comments to avio.h. By moving the aviobuf.c comments to avio.h,
takis
parents:
1787
diff
changeset
|
321 * handle. If the file is not packetized (stream like http or file on |
3328f652d741
Move aviobuf.c comments to avio.h. By moving the aviobuf.c comments to avio.h,
takis
parents:
1787
diff
changeset
|
322 * disk), then 0 is returned. |
3328f652d741
Move aviobuf.c comments to avio.h. By moving the aviobuf.c comments to avio.h,
takis
parents:
1787
diff
changeset
|
323 * |
2747 | 324 * @param s buffered file handle |
1874
3328f652d741
Move aviobuf.c comments to avio.h. By moving the aviobuf.c comments to avio.h,
takis
parents:
1787
diff
changeset
|
325 * @return maximum packet size in bytes |
3328f652d741
Move aviobuf.c comments to avio.h. By moving the aviobuf.c comments to avio.h,
takis
parents:
1787
diff
changeset
|
326 */ |
0 | 327 int url_fget_max_packet_size(ByteIOContext *s); |
328 | |
2771
d52c718e83f9
Use dynamically allocated ByteIOContext in AVFormatContext
andoma
parents:
2748
diff
changeset
|
329 int url_open_buf(ByteIOContext **s, uint8_t *buf, int buf_size, int flags); |
1874
3328f652d741
Move aviobuf.c comments to avio.h. By moving the aviobuf.c comments to avio.h,
takis
parents:
1787
diff
changeset
|
330 |
1876
247fdf49ffb8
Convert all the comment sections into Doxygen compatible comments, same for
takis
parents:
1875
diff
changeset
|
331 /** return the written or read size */ |
0 | 332 int url_close_buf(ByteIOContext *s); |
333 | |
1876
247fdf49ffb8
Convert all the comment sections into Doxygen compatible comments, same for
takis
parents:
1875
diff
changeset
|
334 /** |
1874
3328f652d741
Move aviobuf.c comments to avio.h. By moving the aviobuf.c comments to avio.h,
takis
parents:
1787
diff
changeset
|
335 * Open a write only memory stream. |
3328f652d741
Move aviobuf.c comments to avio.h. By moving the aviobuf.c comments to avio.h,
takis
parents:
1787
diff
changeset
|
336 * |
3328f652d741
Move aviobuf.c comments to avio.h. By moving the aviobuf.c comments to avio.h,
takis
parents:
1787
diff
changeset
|
337 * @param s new IO context |
3328f652d741
Move aviobuf.c comments to avio.h. By moving the aviobuf.c comments to avio.h,
takis
parents:
1787
diff
changeset
|
338 * @return zero if no error. |
3328f652d741
Move aviobuf.c comments to avio.h. By moving the aviobuf.c comments to avio.h,
takis
parents:
1787
diff
changeset
|
339 */ |
2771
d52c718e83f9
Use dynamically allocated ByteIOContext in AVFormatContext
andoma
parents:
2748
diff
changeset
|
340 int url_open_dyn_buf(ByteIOContext **s); |
1874
3328f652d741
Move aviobuf.c comments to avio.h. By moving the aviobuf.c comments to avio.h,
takis
parents:
1787
diff
changeset
|
341 |
1876
247fdf49ffb8
Convert all the comment sections into Doxygen compatible comments, same for
takis
parents:
1875
diff
changeset
|
342 /** |
1874
3328f652d741
Move aviobuf.c comments to avio.h. By moving the aviobuf.c comments to avio.h,
takis
parents:
1787
diff
changeset
|
343 * Open a write only packetized memory stream with a maximum packet |
3328f652d741
Move aviobuf.c comments to avio.h. By moving the aviobuf.c comments to avio.h,
takis
parents:
1787
diff
changeset
|
344 * size of 'max_packet_size'. The stream is stored in a memory buffer |
3328f652d741
Move aviobuf.c comments to avio.h. By moving the aviobuf.c comments to avio.h,
takis
parents:
1787
diff
changeset
|
345 * with a big endian 4 byte header giving the packet size in bytes. |
3328f652d741
Move aviobuf.c comments to avio.h. By moving the aviobuf.c comments to avio.h,
takis
parents:
1787
diff
changeset
|
346 * |
3328f652d741
Move aviobuf.c comments to avio.h. By moving the aviobuf.c comments to avio.h,
takis
parents:
1787
diff
changeset
|
347 * @param s new IO context |
3328f652d741
Move aviobuf.c comments to avio.h. By moving the aviobuf.c comments to avio.h,
takis
parents:
1787
diff
changeset
|
348 * @param max_packet_size maximum packet size (must be > 0) |
3328f652d741
Move aviobuf.c comments to avio.h. By moving the aviobuf.c comments to avio.h,
takis
parents:
1787
diff
changeset
|
349 * @return zero if no error. |
3328f652d741
Move aviobuf.c comments to avio.h. By moving the aviobuf.c comments to avio.h,
takis
parents:
1787
diff
changeset
|
350 */ |
2771
d52c718e83f9
Use dynamically allocated ByteIOContext in AVFormatContext
andoma
parents:
2748
diff
changeset
|
351 int url_open_dyn_packet_buf(ByteIOContext **s, int max_packet_size); |
1874
3328f652d741
Move aviobuf.c comments to avio.h. By moving the aviobuf.c comments to avio.h,
takis
parents:
1787
diff
changeset
|
352 |
1876
247fdf49ffb8
Convert all the comment sections into Doxygen compatible comments, same for
takis
parents:
1875
diff
changeset
|
353 /** |
1874
3328f652d741
Move aviobuf.c comments to avio.h. By moving the aviobuf.c comments to avio.h,
takis
parents:
1787
diff
changeset
|
354 * Return the written size and a pointer to the buffer. The buffer |
3328f652d741
Move aviobuf.c comments to avio.h. By moving the aviobuf.c comments to avio.h,
takis
parents:
1787
diff
changeset
|
355 * must be freed with av_free(). |
3328f652d741
Move aviobuf.c comments to avio.h. By moving the aviobuf.c comments to avio.h,
takis
parents:
1787
diff
changeset
|
356 * @param s IO context |
2748 | 357 * @param pbuffer pointer to a byte buffer |
1874
3328f652d741
Move aviobuf.c comments to avio.h. By moving the aviobuf.c comments to avio.h,
takis
parents:
1787
diff
changeset
|
358 * @return the length of the byte buffer |
3328f652d741
Move aviobuf.c comments to avio.h. By moving the aviobuf.c comments to avio.h,
takis
parents:
1787
diff
changeset
|
359 */ |
65 | 360 int url_close_dyn_buf(ByteIOContext *s, uint8_t **pbuffer); |
0 | 361 |
2683
153d6efc05b8
rename av_crc04C11DB7_update to ff_crc04C11DB7_update and move it to aviobuf.c so it can be reused by other (de)muxers
bcoudurier
parents:
2620
diff
changeset
|
362 unsigned long ff_crc04C11DB7_update(unsigned long checksum, const uint8_t *buf, unsigned int len); |
418
41da3366d341
checksuming for nut & nice checksum API for libavformat
michael
parents:
389
diff
changeset
|
363 unsigned long get_checksum(ByteIOContext *s); |
41da3366d341
checksuming for nut & nice checksum API for libavformat
michael
parents:
389
diff
changeset
|
364 void init_checksum(ByteIOContext *s, unsigned long (*update_checksum)(unsigned long c, const uint8_t *p, unsigned int len), unsigned long checksum); |
41da3366d341
checksuming for nut & nice checksum API for libavformat
michael
parents:
389
diff
changeset
|
365 |
0 | 366 /* udp.c */ |
367 int udp_set_remote_url(URLContext *h, const char *uri); | |
368 int udp_get_local_port(URLContext *h); | |
369 int udp_get_file_handle(URLContext *h); | |
370 | |
2620
792383dd085e
Add FFMPEG_ prefix to all multiple inclusion guards.
diego
parents:
2598
diff
changeset
|
371 #endif /* FFMPEG_AVIO_H */ |