aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2011-11-05 11:42:13 +0100
committerAnton Khirnov <anton@khirnov.net>2011-11-13 13:14:14 +0100
commit163a31136dcb0b5966fc779917e0408cb52d7295 (patch)
tree7899e59484a07ce7e379f30de8ae4914b85fc95f
parent6ef350c16bf9a375a1ea3e531019ea922ae5a1e1 (diff)
downloadffmpeg-163a31136dcb0b5966fc779917e0408cb52d7295.tar.gz
avio: add and use ffurl_protocol_next().
-rw-r--r--libavformat/avio.c19
-rw-r--r--libavformat/url.h7
2 files changed, 18 insertions, 8 deletions
diff --git a/libavformat/avio.c b/libavformat/avio.c
index c17c1c4438..06972cdbdd 100644
--- a/libavformat/avio.c
+++ b/libavformat/avio.c
@@ -30,6 +30,13 @@
#endif
#include "url.h"
+static URLProtocol *first_protocol = NULL;
+
+URLProtocol *ffurl_protocol_next(URLProtocol *prev)
+{
+ return prev ? prev->next : first_protocol;
+}
+
/** @name Logging context. */
/*@{*/
static const char *urlcontext_to_name(void *ptr)
@@ -49,21 +56,19 @@ static const AVClass urlcontext_class = {
static int default_interrupt_cb(void);
-URLProtocol *first_protocol = NULL;
int (*url_interrupt_cb)(void) = default_interrupt_cb;
#if FF_API_OLD_AVIO
URLProtocol *av_protocol_next(URLProtocol *p)
{
- if(p) return p->next;
- else return first_protocol;
+ return ffurl_protocol_next(p);
}
#endif
const char *avio_enum_protocols(void **opaque, int output)
{
URLProtocol **p = opaque;
- *p = *p ? (*p)->next : first_protocol;
+ *p = ffurl_protocol_next(*p);
if (!*p) return NULL;
if ((output && (*p)->url_write) || (!output && (*p)->url_read))
return (*p)->name;
@@ -225,7 +230,7 @@ int av_register_protocol2(URLProtocol *protocol, int size)
int ffurl_alloc(URLContext **puc, const char *filename, int flags,
const AVIOInterruptCB *int_cb)
{
- URLProtocol *up;
+ URLProtocol *up = NULL;
char proto_str[128], proto_nested[128], *ptr;
size_t proto_len = strspn(filename, URL_SCHEME_CHARS);
@@ -238,14 +243,12 @@ int ffurl_alloc(URLContext **puc, const char *filename, int flags,
if ((ptr = strchr(proto_nested, '+')))
*ptr = '\0';
- up = first_protocol;
- while (up != NULL) {
+ while (up = ffurl_protocol_next(up)) {
if (!strcmp(proto_str, up->name))
return url_alloc_for_protocol (puc, up, filename, flags, int_cb);
if (up->flags & URL_PROTOCOL_FLAG_NESTED_SCHEME &&
!strcmp(proto_nested, up->name))
return url_alloc_for_protocol (puc, up, filename, flags, int_cb);
- up = up->next;
}
*puc = NULL;
return AVERROR(ENOENT);
diff --git a/libavformat/url.h b/libavformat/url.h
index 03ba15fdda..902539aa64 100644
--- a/libavformat/url.h
+++ b/libavformat/url.h
@@ -182,6 +182,13 @@ int ffurl_register_protocol(URLProtocol *protocol, int size);
*/
int ff_check_interrupt(AVIOInterruptCB *cb);
+/**
+ * Iterate over all available protocols.
+ *
+ * @param prev result of the previous call to this functions or NULL.
+ */
+URLProtocol *ffurl_protocol_next(URLProtocol *prev);
+
/* udp.c */
int ff_udp_set_remote_url(URLContext *h, const char *uri);
int ff_udp_get_local_port(URLContext *h);