summaryrefslogtreecommitdiff
path: root/libavformat/protocols.c
diff options
context:
space:
mode:
authorDerek Buitenhuis <derek.buitenhuis@gmail.com>2016-02-29 18:07:41 +0000
committerDerek Buitenhuis <derek.buitenhuis@gmail.com>2016-02-29 18:08:15 +0000
commitbb8cc89b2986df6f60831b67cd250da312cce1d0 (patch)
tree6678d45fc1451bc18bbc92de58bcf1f5308ac4c7 /libavformat/protocols.c
parent95cdc0a5c658a3f4301a66bcb1d96d11dc941151 (diff)
parent832a202c47a246ed15e3edc6b05dfcfa7d82c4b2 (diff)
Merge commit '832a202c47a246ed15e3edc6b05dfcfa7d82c4b2'
* commit '832a202c47a246ed15e3edc6b05dfcfa7d82c4b2': protocols: make the list of protocols static Merged-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
Diffstat (limited to 'libavformat/protocols.c')
-rw-r--r--libavformat/protocols.c41
1 files changed, 34 insertions, 7 deletions
diff --git a/libavformat/protocols.c b/libavformat/protocols.c
index 266e2c0d6d..f37497056d 100644
--- a/libavformat/protocols.c
+++ b/libavformat/protocols.c
@@ -18,6 +18,9 @@
#include "config.h"
+#include "libavutil/avstring.h"
+#include "libavutil/mem.h"
+
#include "url.h"
extern const URLProtocol ff_async_protocol;
@@ -66,7 +69,7 @@ extern const URLProtocol ff_librtmpte_protocol;
extern const URLProtocol ff_libssh_protocol;
extern const URLProtocol ff_libsmbclient_protocol;
-const URLProtocol *ff_url_protocols[] = {
+static const URLProtocol *url_protocols[] = {
#if CONFIG_ASYNC_PROTOCOL
&ff_async_protocol,
#endif
@@ -212,17 +215,17 @@ const AVClass *ff_urlcontext_child_class_next(const AVClass *prev)
int i;
/* find the protocol that corresponds to prev */
- for (i = 0; ff_url_protocols[i]; i++) {
- if (ff_url_protocols[i]->priv_data_class == prev) {
+ for (i = 0; url_protocols[i]; i++) {
+ if (url_protocols[i]->priv_data_class == prev) {
i++;
break;
}
}
/* find next protocol with priv options */
- for (; ff_url_protocols[i]; i++)
- if (ff_url_protocols[i]->priv_data_class)
- return ff_url_protocols[i]->priv_data_class;
+ for (; url_protocols[i]; i++)
+ if (url_protocols[i]->priv_data_class)
+ return url_protocols[i]->priv_data_class;
return NULL;
}
@@ -231,7 +234,7 @@ const char *avio_enum_protocols(void **opaque, int output)
{
const URLProtocol **p = *opaque;
- p = p ? p + 1 : ff_url_protocols;
+ p = p ? p + 1 : url_protocols;
*opaque = p;
if (!*p) {
*opaque = NULL;
@@ -241,3 +244,27 @@ const char *avio_enum_protocols(void **opaque, int output)
return (*p)->name;
return avio_enum_protocols(opaque, output);
}
+
+const URLProtocol **ffurl_get_protocols(const char *whitelist,
+ const char *blacklist)
+{
+ const URLProtocol **ret;
+ int i, ret_idx = 0;
+
+ ret = av_mallocz_array(FF_ARRAY_ELEMS(url_protocols), sizeof(*ret));
+ if (!ret)
+ return NULL;
+
+ for (i = 0; url_protocols[i]; i++) {
+ const URLProtocol *up = url_protocols[i];
+
+ if (whitelist && *whitelist && !av_match_name(up->name, whitelist))
+ continue;
+ if (blacklist && *blacklist && av_match_name(up->name, blacklist))
+ continue;
+
+ ret[ret_idx++] = up;
+ }
+
+ return ret;
+}