diff options
author | Derek Buitenhuis <derek.buitenhuis@gmail.com> | 2016-02-29 18:07:41 +0000 |
---|---|---|
committer | Derek Buitenhuis <derek.buitenhuis@gmail.com> | 2016-02-29 18:08:15 +0000 |
commit | bb8cc89b2986df6f60831b67cd250da312cce1d0 (patch) | |
tree | 6678d45fc1451bc18bbc92de58bcf1f5308ac4c7 /libavformat/protocols.c | |
parent | 95cdc0a5c658a3f4301a66bcb1d96d11dc941151 (diff) | |
parent | 832a202c47a246ed15e3edc6b05dfcfa7d82c4b2 (diff) | |
download | ffmpeg-bb8cc89b2986df6f60831b67cd250da312cce1d0.tar.gz |
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.c | 41 |
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; +} |