90 if (!(p = *opaque))
return NULL;
101 memcpy(temp, protocol, size);
112 const char *filename,
int flags,
171 #define URL_SCHEME_CHARS \
172 "abcdefghijklmnopqrstuvwxyz" \
173 "ABCDEFGHIJKLMNOPQRSTUVWXYZ" \
180 char proto_str[128], proto_nested[128], *ptr;
183 if (filename[proto_len] !=
':' ||
is_dos_path(filename))
184 strcpy(proto_str,
"file");
186 av_strlcpy(proto_str, filename,
FFMIN(proto_len+1,
sizeof(proto_str)));
188 av_strlcpy(proto_nested, proto_str,
sizeof(proto_nested));
189 if ((ptr = strchr(proto_nested,
'+')))
193 if (!strcmp(proto_str, up->
name))
196 !strcmp(proto_nested, up->
name))
206 int ret =
ffurl_alloc(puc, filename, flags, int_cb);
209 if (options && (*puc)->prot->priv_data_class &&
222 int (*transfer_func)(
URLContext *h,
unsigned char *buf,
int size))
225 int fast_retries = 5;
228 while (len < size_min) {
229 ret = transfer_func(h, buf+len, size-len);
243 fast_retries =
FFMAX(fast_retries, 2);
void * av_malloc(size_t size)
Allocate a block of size bytes with alignment suitable for all memory accesses (including vectors if ...
int ffurl_register_protocol(URLProtocol *protocol, int size)
Register the URLProtocol protocol.
#define URL_PROTOCOL_FLAG_NETWORK
int(* url_check)(URLContext *h, int mask)
int ffurl_write(URLContext *h, const unsigned char *buf, int size)
Write size bytes from buf to the resource accessed by h.
int is_streamed
true if streamed (no seek possible), default = false
static URLProtocol * first_protocol
int ffurl_connect(URLContext *uc, AVDictionary **options)
Connect an URLContext that has been allocated by ffurl_alloc.
AVIOInterruptCB interrupt_callback
void av_opt_set_defaults(void *s)
Set the values of all AVOption fields to their default values.
struct URLProtocol * prot
void ff_network_close(void)
int av_usleep(unsigned usec)
Sleep for a period of time.
static void * urlcontext_child_next(void *obj, void *prev)
int ffurl_shutdown(URLContext *h, int flags)
Signal the URLContext that we are done reading or writing the stream.
const AVClass * priv_data_class
struct URLProtocol * next
int avio_check(const char *url, int flags)
Return AVIO_FLAG_* access flags corresponding to the access permissions of the resource in url...
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
int ff_network_init(void)
miscellaneous OS support macros and functions.
static int url_alloc_for_protocol(URLContext **puc, struct URLProtocol *up, const char *filename, int flags, const AVIOInterruptCB *int_cb)
int(* url_get_file_handle)(URLContext *h)
static int retry_transfer_wrapper(URLContext *h, unsigned char *buf, int size, int size_min, int(*transfer_func)(URLContext *h, unsigned char *buf, int size))
int(* url_get_multi_file_handle)(URLContext *h, int **handles, int *numhandles)
Callback for checking whether to abort blocking functions.
int ffurl_alloc(URLContext **puc, const char *filename, int flags, const AVIOInterruptCB *int_cb)
Create a URLContext for accessing to the resource indicated by url, but do not initiate the connectio...
int(* url_open2)(URLContext *h, const char *url, int flags, AVDictionary **options)
This callback is to be used by protocols which open further nested protocols.
void av_free(void *ptr)
Free a memory block which has been allocated with av_malloc(z)() or av_realloc(). ...
int ffurl_get_multi_file_handle(URLContext *h, int **handles, int *numhandles)
Return the file descriptors associated with this URL.
#define URL_PROTOCOL_FLAG_NESTED_SCHEME
int(* url_open)(URLContext *h, const char *url, int flags)
size_t av_strlcpy(char *dst, const char *src, size_t size)
Copy the string src to dst, but no more than size - 1 bytes, and null-terminate dst.
static const char * urlcontext_to_name(void *ptr)
int(* url_write)(URLContext *h, const unsigned char *buf, int size)
int(* url_read)(URLContext *h, unsigned char *buf, int size)
Read data from the protocol.
static const AVOption options[]
URLProtocol * ffurl_protocol_next(URLProtocol *prev)
Iterate over all available protocols.
const AVIOInterruptCB int_cb
#define AVIO_FLAG_NONBLOCK
static const AVClass * urlcontext_child_class_next(const AVClass *prev)
const char * avio_enum_protocols(void **opaque, int output)
Iterate through names of available protocols.
int64_t(* url_seek)(URLContext *h, int64_t pos, int whence)
int ffurl_get_file_handle(URLContext *h)
Return the file descriptor associated with this URL.
static int is_dos_path(const char *path)
int ff_check_interrupt(AVIOInterruptCB *cb)
Check if the user has requested to interrup a blocking function associated with cb.
int av_opt_set_dict(void *obj, AVDictionary **options)
int64_t ffurl_size(URLContext *h)
Return the filesize of the resource accessed by h, AVERROR(ENOSYS) if the operation is not supported ...
Describe the class of an AVClass context structure.
const AVClass * av_class
information for av_log().
int ffurl_close(URLContext *h)
Close the resource accessed by the URLContext h, and free the memory used by it.
const AVClass ffurl_context_class
void av_opt_free(void *obj)
Free all string and binary options in obj.
int64_t ffurl_seek(URLContext *h, int64_t pos, int whence)
Change the position that will be used by the next read/write operation on the resource accessed by h...
int ffurl_open(URLContext **puc, const char *filename, int flags, const AVIOInterruptCB *int_cb, AVDictionary **options)
Create an URLContext for accessing to the resource indicated by url, and open it. ...
int ffurl_read_complete(URLContext *h, unsigned char *buf, int size)
Read as many bytes as possible (up to size), calling the read function multiple times if necessary...
char * filename
specified URL
#define AVERROR_PROTOCOL_NOT_FOUND
int max_packet_size
if non zero, the stream is packetized with this max packet size
int(* url_close)(URLContext *h)
unbuffered private I/O API
int(* url_shutdown)(URLContext *h, int flags)
int ffurl_read(URLContext *h, unsigned char *buf, int size)
Read up to size bytes from the resource accessed by h, and store the read bytes in buf...
void * av_mallocz(size_t size)
Allocate a block of size bytes with alignment suitable for all memory accesses (including vectors if ...