From: Stefano Sabatini <stefano.sabatini-l...@poste.it> --- libavformat/avio.c | 16 ++++++++++++++++ libavformat/avio.h | 9 +++++++++ libavformat/url.h | 1 + 3 files changed, 26 insertions(+), 0 deletions(-)
diff --git a/libavformat/avio.c b/libavformat/avio.c index ad1f1b4..ecc7f27 100644 --- a/libavformat/avio.c +++ b/libavformat/avio.c @@ -374,6 +374,22 @@ int url_exist(const char *filename) return 1; } +int avio_check(const char *url, int flags) +{ + URLContext *h; + int ret = url_alloc(&h, url, flags); + if (ret) + return ret; + + if (h->prot->url_check) + ret = h->prot->url_check(h, flags); + else + ret = (ret = url_connect(h)) < 0 ? ret : 1; + + url_close(h); + return ret; +} + int64_t ffurl_size(URLContext *h) { int64_t pos, size; diff --git a/libavformat/avio.h b/libavformat/avio.h index 7bb8d17..823aa97 100644 --- a/libavformat/avio.h +++ b/libavformat/avio.h @@ -126,6 +126,14 @@ attribute_deprecated void url_set_interrupt_cb(int (*interrupt_cb)(void)); int url_exist(const char *url); /** + * Return a positive value if the resource indicated by url can be + * accessed with the mode indicated by flags, 0 if the resource cannot + * be accessed in that way, a negative value corresponding to an + * AVERROR code in case of failure. + */ +int avio_check(const char *url, int flags); + +/** * The callback is called in blocking functions to test regulary if * asynchronous interruption is needed. AVERROR_EXIT is returned * in this case by the interrupted function. 'NULL' means no interrupt @@ -159,6 +167,7 @@ typedef struct URLProtocol { int priv_data_size; const AVClass *priv_data_class; int flags; + int (*url_check)(URLContext *h, int flags); } URLProtocol; #endif diff --git a/libavformat/url.h b/libavformat/url.h index bde06d9..7a39b9c 100644 --- a/libavformat/url.h +++ b/libavformat/url.h @@ -59,6 +59,7 @@ typedef struct URLProtocol { int priv_data_size; const AVClass *priv_data_class; int flags; + int (*url_check)(URLContext *h, int flags); } URLProtocol; #endif -- 1.7.4.1 _______________________________________________ libav-devel mailing list libav-devel@libav.org https://lists.libav.org/mailman/listinfo/libav-devel