3 * This file is part of FFmpeg.
5 * FFmpeg is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
10 * FFmpeg is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with FFmpeg; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22 * unbuffered private I/O API
25 #ifndef AVFORMAT_URL_H
26 #define AVFORMAT_URL_H
29 #include "libavformat/version.h"
32 #define URL_PROTOCOL_FLAG_NESTED_SCHEME 1 /*< The protocol name can be the first part of a nested protocol scheme */
36 * Create a URLContext for accessing to the resource indicated by
37 * url, but do not initiate the connection yet.
39 * @param puc pointer to the location where, in case of success, the
40 * function puts the pointer to the created URLContext
41 * @param flags flags which control how the resource indicated by url
43 * @return 0 in case of success, a negative value corresponding to an
44 * AVERROR code in case of failure
46 int ffurl_alloc(URLContext **h, const char *url, int flags);
49 * Connect an URLContext that has been allocated by ffurl_alloc
51 int ffurl_connect(URLContext *h);
54 * Create an URLContext for accessing to the resource indicated by
57 * @param puc pointer to the location where, in case of success, the
58 * function puts the pointer to the created URLContext
59 * @param flags flags which control how the resource indicated by url
61 * @return 0 in case of success, a negative value corresponding to an
62 * AVERROR code in case of failure
64 int ffurl_open(URLContext **h, const char *url, int flags);
67 * Read up to size bytes from the resource accessed by h, and store
68 * the read bytes in buf.
70 * @return The number of bytes actually read, or a negative value
71 * corresponding to an AVERROR code in case of error. A value of zero
72 * indicates that it is not possible to read more from the accessed
73 * resource (except if the value of the size argument is also zero).
75 int ffurl_read(URLContext *h, unsigned char *buf, int size);
78 * Read as many bytes as possible (up to size), calling the
79 * read function multiple times if necessary.
80 * This makes special short-read handling in applications
81 * unnecessary, if the return value is < size then it is
82 * certain there was either an error or the end of file was reached.
84 int ffurl_read_complete(URLContext *h, unsigned char *buf, int size);
87 * Write size bytes from buf to the resource accessed by h.
89 * @return the number of bytes actually written, or a negative value
90 * corresponding to an AVERROR code in case of failure
92 int ffurl_write(URLContext *h, const unsigned char *buf, int size);
95 * Change the position that will be used by the next read/write
96 * operation on the resource accessed by h.
98 * @param pos specifies the new position to set
99 * @param whence specifies how pos should be interpreted, it must be
100 * one of SEEK_SET (seek from the beginning), SEEK_CUR (seek from the
101 * current position), SEEK_END (seek from the end), or AVSEEK_SIZE
102 * (return the filesize of the requested resource, pos is ignored).
103 * @return a negative value corresponding to an AVERROR code in case
104 * of failure, or the resulting file position, measured in bytes from
105 * the beginning of the file. You can use this feature together with
106 * SEEK_CUR to read the current file position.
108 int64_t ffurl_seek(URLContext *h, int64_t pos, int whence);
111 * Close the resource accessed by the URLContext h, and free the
114 * @return a negative value if an error condition occurred, 0
117 int ffurl_close(URLContext *h);
120 * Return the filesize of the resource accessed by h, AVERROR(ENOSYS)
121 * if the operation is not supported by h, or another negative value
122 * corresponding to an AVERROR error code in case of failure.
124 int64_t ffurl_size(URLContext *h);
127 * Return the file descriptor associated with this URL. For RTP, this
128 * will return only the RTP file descriptor, not the RTCP file descriptor.
130 * @return the file descriptor associated with this URL, or <0 on error.
132 int ffurl_get_file_handle(URLContext *h);
134 #endif //AVFORMAT_URL_H