diff options
author | Martin Storsjö <martin@martin.st> | 2010-03-05 22:30:21 +0000 |
---|---|---|
committer | Martin Storsjö <martin@martin.st> | 2010-03-05 22:30:21 +0000 |
commit | 67d4b3f2054ee30d0329f82212078e9a243393de (patch) | |
tree | b2119ca85258e546180cfd3ae96792b3071f2b43 /libavformat | |
parent | e5a1c20707ce920538dea5ec4ae7d03d7f64599c (diff) | |
download | ffmpeg-67d4b3f2054ee30d0329f82212078e9a243393de.tar.gz |
Always call ff_network_init/ff_network_close when opening protocols
ff_network_init is a no-op on all platforms except windows, and on
windows the performance penalty is minimal (less than 1 ms in my tests).
Originally committed as revision 22224 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavformat')
-rw-r--r-- | libavformat/avio.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/libavformat/avio.c b/libavformat/avio.c index ec427deea3..1371722cfc 100644 --- a/libavformat/avio.c +++ b/libavformat/avio.c @@ -26,6 +26,9 @@ #include "libavcodec/opt.h" #include "os_support.h" #include "avformat.h" +#if CONFIG_NETWORK +#include "network.h" +#endif #if LIBAVFORMAT_VERSION_MAJOR >= 53 /** @name Logging context. */ @@ -76,6 +79,10 @@ int url_open_protocol (URLContext **puc, struct URLProtocol *up, URLContext *uc; int err; +#if CONFIG_NETWORK + if (!ff_network_init()) + return AVERROR(EIO); +#endif uc = av_mallocz(sizeof(URLContext) + strlen(filename) + 1); if (!uc) { err = AVERROR(ENOMEM); @@ -93,8 +100,7 @@ int url_open_protocol (URLContext **puc, struct URLProtocol *up, err = up->url_open(uc, filename, flags); if (err < 0) { av_free(uc); - *puc = NULL; - return err; + goto fail; } //We must be careful here as url_seek() could be slow, for example for http @@ -106,6 +112,9 @@ int url_open_protocol (URLContext **puc, struct URLProtocol *up, return 0; fail: *puc = NULL; +#if CONFIG_NETWORK + ff_network_close(); +#endif return err; } @@ -204,6 +213,9 @@ int url_close(URLContext *h) if (h->prot->url_close) ret = h->prot->url_close(h); +#if CONFIG_NETWORK + ff_network_close(); +#endif av_free(h); return ret; } |