aboutsummaryrefslogtreecommitdiffstats
path: root/libavformat
diff options
context:
space:
mode:
authorMartin Storsjö <martin@martin.st>2010-03-05 22:30:21 +0000
committerMartin Storsjö <martin@martin.st>2010-03-05 22:30:21 +0000
commit67d4b3f2054ee30d0329f82212078e9a243393de (patch)
treeb2119ca85258e546180cfd3ae96792b3071f2b43 /libavformat
parente5a1c20707ce920538dea5ec4ae7d03d7f64599c (diff)
downloadffmpeg-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.c16
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;
}