summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libavformat/avio.c5
-rw-r--r--libavformat/aviobuf.c2
-rw-r--r--libavformat/concat.c2
-rw-r--r--libavformat/crypto.c2
-rw-r--r--libavformat/gopher.c2
-rw-r--r--libavformat/hlsproto.c2
-rw-r--r--libavformat/http.c4
-rw-r--r--libavformat/icecast.c2
-rw-r--r--libavformat/md5proto.c2
-rw-r--r--libavformat/mmst.c2
-rw-r--r--libavformat/rtmpcrypt.c2
-rw-r--r--libavformat/rtmpproto.c4
-rw-r--r--libavformat/rtpproto.c4
-rw-r--r--libavformat/rtsp.c10
-rw-r--r--libavformat/rtspdec.c4
-rw-r--r--libavformat/sapdec.c2
-rw-r--r--libavformat/sapenc.c4
-rw-r--r--libavformat/smoothstreamingenc.c6
-rw-r--r--libavformat/srtpproto.c2
-rw-r--r--libavformat/tls.c2
-rw-r--r--libavformat/url.h4
21 files changed, 37 insertions, 32 deletions
diff --git a/libavformat/avio.c b/libavformat/avio.c
index 6039990990..1692f1ba47 100644
--- a/libavformat/avio.c
+++ b/libavformat/avio.c
@@ -174,11 +174,14 @@ int ffurl_alloc(URLContext **puc, const char *filename, int flags,
int ffurl_open(URLContext **puc, const char *filename, int flags,
const AVIOInterruptCB *int_cb, AVDictionary **options,
- const URLProtocol **protocols)
+ const URLProtocol **protocols,
+ URLContext *parent)
{
int ret = ffurl_alloc(puc, filename, flags, int_cb, protocols);
if (ret)
return ret;
+ if (parent)
+ av_opt_copy(*puc, parent);
if (options &&
(ret = av_opt_set_dict(*puc, options)) < 0)
goto fail;
diff --git a/libavformat/aviobuf.c b/libavformat/aviobuf.c
index a2edb74974..29fccbea83 100644
--- a/libavformat/aviobuf.c
+++ b/libavformat/aviobuf.c
@@ -905,7 +905,7 @@ int avio_open2(AVIOContext **s, const char *filename, int flags,
if (!protocols)
return AVERROR(ENOMEM);
- err = ffurl_open(&h, filename, flags, int_cb, options, protocols);
+ err = ffurl_open(&h, filename, flags, int_cb, options, protocols, NULL);
if (err < 0) {
av_freep(&protocols);
return err;
diff --git a/libavformat/concat.c b/libavformat/concat.c
index ecdf5dfeb7..a338df61ce 100644
--- a/libavformat/concat.c
+++ b/libavformat/concat.c
@@ -95,7 +95,7 @@ static av_cold int concat_open(URLContext *h, const char *uri, int flags)
/* creating URLContext */
if ((err = ffurl_open(&uc, node_uri, flags,
- &h->interrupt_callback, NULL, h->protocols)) < 0)
+ &h->interrupt_callback, NULL, h->protocols, h)) < 0)
break;
/* creating size */
diff --git a/libavformat/crypto.c b/libavformat/crypto.c
index a364dc0af5..55430c48e5 100644
--- a/libavformat/crypto.c
+++ b/libavformat/crypto.c
@@ -83,7 +83,7 @@ static int crypto_open(URLContext *h, const char *uri, int flags)
goto err;
}
if ((ret = ffurl_open(&c->hd, nested_url, AVIO_FLAG_READ,
- &h->interrupt_callback, NULL, h->protocols)) < 0) {
+ &h->interrupt_callback, NULL, h->protocols, h)) < 0) {
av_log(h, AV_LOG_ERROR, "Unable to open input\n");
goto err;
}
diff --git a/libavformat/gopher.c b/libavformat/gopher.c
index afa2b7d68b..6d9fc38d8c 100644
--- a/libavformat/gopher.c
+++ b/libavformat/gopher.c
@@ -94,7 +94,7 @@ static int gopher_open(URLContext *h, const char *uri, int flags)
s->hd = NULL;
err = ffurl_open(&s->hd, buf, AVIO_FLAG_READ_WRITE,
- &h->interrupt_callback, NULL, h->protocols);
+ &h->interrupt_callback, NULL, h->protocols, h);
if (err < 0)
goto fail;
diff --git a/libavformat/hlsproto.c b/libavformat/hlsproto.c
index b01cef0008..4c3048a790 100644
--- a/libavformat/hlsproto.c
+++ b/libavformat/hlsproto.c
@@ -304,7 +304,7 @@ retry:
url = s->segments[s->cur_seq_no - s->start_seq_no]->url,
av_log(h, AV_LOG_DEBUG, "opening %s\n", url);
ret = ffurl_open(&s->seg_hd, url, AVIO_FLAG_READ,
- &h->interrupt_callback, NULL, h->protocols);
+ &h->interrupt_callback, NULL, h->protocols, h);
if (ret < 0) {
if (ff_check_interrupt(&h->interrupt_callback))
return AVERROR_EXIT;
diff --git a/libavformat/http.c b/libavformat/http.c
index 48303908b5..8fe8d11e1e 100644
--- a/libavformat/http.c
+++ b/libavformat/http.c
@@ -181,7 +181,7 @@ static int http_open_cnx_internal(URLContext *h, AVDictionary **options)
if (!s->hd) {
err = ffurl_open(&s->hd, buf, AVIO_FLAG_READ_WRITE,
- &h->interrupt_callback, options, h->protocols);
+ &h->interrupt_callback, options, h->protocols, h);
if (err < 0)
return err;
}
@@ -1079,7 +1079,7 @@ static int http_proxy_open(URLContext *h, const char *uri, int flags)
NULL);
redo:
ret = ffurl_open(&s->hd, lower_url, AVIO_FLAG_READ_WRITE,
- &h->interrupt_callback, NULL, h->protocols);
+ &h->interrupt_callback, NULL, h->protocols, h);
if (ret < 0)
return ret;
diff --git a/libavformat/icecast.c b/libavformat/icecast.c
index 78238378b7..820681b953 100644
--- a/libavformat/icecast.c
+++ b/libavformat/icecast.c
@@ -177,7 +177,7 @@ static int icecast_open(URLContext *h, const char *uri, int flags)
ff_url_join(h_url, sizeof(h_url), "http", auth, host, port, "%s", path);
// Finally open http proto handler
ret = ffurl_open(&s->hd, h_url, AVIO_FLAG_READ_WRITE, NULL, &opt_dict,
- h->protocols);
+ h->protocols, h);
cleanup:
// Free variables
diff --git a/libavformat/md5proto.c b/libavformat/md5proto.c
index 07c085a561..08cdd71ea1 100644
--- a/libavformat/md5proto.c
+++ b/libavformat/md5proto.c
@@ -71,7 +71,7 @@ static int md5_close(URLContext *h)
if (*filename) {
err = ffurl_open(&out, filename, AVIO_FLAG_WRITE,
&h->interrupt_callback, NULL,
- h->protocols);
+ h->protocols, h);
if (err)
return err;
err = ffurl_write(out, buf, i*2+1);
diff --git a/libavformat/mmst.c b/libavformat/mmst.c
index aeddf0fd1d..1489076ad3 100644
--- a/libavformat/mmst.c
+++ b/libavformat/mmst.c
@@ -520,7 +520,7 @@ static int mms_open(URLContext *h, const char *uri, int flags)
// establish tcp connection.
ff_url_join(tcpname, sizeof(tcpname), "tcp", NULL, mmst->host, port, NULL);
err = ffurl_open(&mms->mms_hd, tcpname, AVIO_FLAG_READ_WRITE,
- &h->interrupt_callback, NULL, h->protocols);
+ &h->interrupt_callback, NULL, h->protocols, h);
if (err)
goto fail;
diff --git a/libavformat/rtmpcrypt.c b/libavformat/rtmpcrypt.c
index 75fc1283c5..cf121c635a 100644
--- a/libavformat/rtmpcrypt.c
+++ b/libavformat/rtmpcrypt.c
@@ -265,7 +265,7 @@ static int rtmpe_open(URLContext *h, const char *uri, int flags)
/* open the tcp or ffrtmphttp connection */
if ((ret = ffurl_open(&rt->stream, url, AVIO_FLAG_READ_WRITE,
- &h->interrupt_callback, NULL, h->protocols)) < 0) {
+ &h->interrupt_callback, NULL, h->protocols, h)) < 0) {
rtmpe_close(h);
return ret;
}
diff --git a/libavformat/rtmpproto.c b/libavformat/rtmpproto.c
index 9ed3d0f436..d4f35f6b19 100644
--- a/libavformat/rtmpproto.c
+++ b/libavformat/rtmpproto.c
@@ -1119,7 +1119,7 @@ static int rtmp_calc_swfhash(URLContext *s)
/* Get the SWF player file. */
if ((ret = ffurl_open(&stream, rt->swfverify, AVIO_FLAG_READ,
- &s->interrupt_callback, NULL, s->protocols)) < 0) {
+ &s->interrupt_callback, NULL, s->protocols, s)) < 0) {
av_log(s, AV_LOG_ERROR, "Cannot open connection %s.\n", rt->swfverify);
goto fail;
}
@@ -2641,7 +2641,7 @@ static int rtmp_open(URLContext *s, const char *uri, int flags)
reconnect:
if ((ret = ffurl_open(&rt->stream, buf, AVIO_FLAG_READ_WRITE,
- &s->interrupt_callback, &opts, s->protocols)) < 0) {
+ &s->interrupt_callback, &opts, s->protocols, s)) < 0) {
av_log(s , AV_LOG_ERROR, "Cannot open connection %s\n", buf);
goto fail;
}
diff --git a/libavformat/rtpproto.c b/libavformat/rtpproto.c
index 50b8d249ce..6582e4ad76 100644
--- a/libavformat/rtpproto.c
+++ b/libavformat/rtpproto.c
@@ -369,7 +369,7 @@ static int rtp_open(URLContext *h, const char *uri, int flags)
build_udp_url(s, buf, sizeof(buf),
hostname, rtp_port, s->local_rtpport, sources, block);
if (ffurl_open(&s->rtp_hd, buf, flags, &h->interrupt_callback, NULL,
- h->protocols) < 0)
+ h->protocols, h) < 0)
goto fail;
if (s->local_rtpport >= 0 && s->local_rtcpport < 0)
s->local_rtcpport = ff_udp_get_local_port(s->rtp_hd) + 1;
@@ -377,7 +377,7 @@ static int rtp_open(URLContext *h, const char *uri, int flags)
build_udp_url(s, buf, sizeof(buf),
hostname, s->rtcp_port, s->local_rtcpport, sources, block);
if (ffurl_open(&s->rtcp_hd, buf, flags, &h->interrupt_callback, NULL,
- h->protocols) < 0)
+ h->protocols, h) < 0)
goto fail;
/* just to ease handle access. XXX: need to suppress direct handle
diff --git a/libavformat/rtsp.c b/libavformat/rtsp.c
index dc07422349..7e430e838b 100644
--- a/libavformat/rtsp.c
+++ b/libavformat/rtsp.c
@@ -1466,7 +1466,7 @@ int ff_rtsp_make_setup_request(AVFormatContext *s, const char *host, int port,
/* we will use two ports per rtp stream (rtp and rtcp) */
j += 2;
err = ffurl_open(&rtsp_st->rtp_handle, buf, AVIO_FLAG_READ_WRITE,
- &s->interrupt_callback, &opts, rt->protocols);
+ &s->interrupt_callback, &opts, rt->protocols, NULL);
av_dict_free(&opts);
@@ -1610,7 +1610,7 @@ int ff_rtsp_make_setup_request(AVFormatContext *s, const char *host, int port,
ff_url_join(url, sizeof(url), "rtp", NULL, namebuf,
port, "%s", optbuf);
if (ffurl_open(&rtsp_st->rtp_handle, url, AVIO_FLAG_READ_WRITE,
- &s->interrupt_callback, NULL, rt->protocols) < 0) {
+ &s->interrupt_callback, NULL, rt->protocols, NULL) < 0) {
err = AVERROR_INVALIDDATA;
goto fail;
}
@@ -1804,7 +1804,7 @@ redirect:
ff_url_join(tcpname, sizeof(tcpname), lower_rtsp_proto, NULL,
host, port, NULL);
if (ffurl_open(&rt->rtsp_hd, tcpname, AVIO_FLAG_READ_WRITE,
- &s->interrupt_callback, NULL, rt->protocols) < 0) {
+ &s->interrupt_callback, NULL, rt->protocols, NULL) < 0) {
err = AVERROR(EIO);
goto fail;
}
@@ -2311,7 +2311,7 @@ static int sdp_read_header(AVFormatContext *s)
rtsp_st->nb_exclude_source_addrs,
rtsp_st->exclude_source_addrs);
err = ffurl_open(&rtsp_st->rtp_handle, url, AVIO_FLAG_READ_WRITE,
- &s->interrupt_callback, &opts, rt->protocols);
+ &s->interrupt_callback, &opts, rt->protocols, NULL);
av_dict_free(&opts);
@@ -2388,7 +2388,7 @@ static int rtp_read_header(AVFormatContext *s)
}
ret = ffurl_open(&in, s->filename, AVIO_FLAG_READ,
- &s->interrupt_callback, NULL, rt->protocols);
+ &s->interrupt_callback, NULL, rt->protocols, NULL);
if (ret)
goto fail;
diff --git a/libavformat/rtspdec.c b/libavformat/rtspdec.c
index 7b6a0258c8..03374dc0e6 100644
--- a/libavformat/rtspdec.c
+++ b/libavformat/rtspdec.c
@@ -295,7 +295,7 @@ static int rtsp_read_setup(AVFormatContext *s, char* host, char *controlurl)
ff_url_join(url, sizeof(url), "rtp", NULL, host, localport, NULL);
av_log(s, AV_LOG_TRACE, "Opening: %s", url);
ret = ffurl_open(&rtsp_st->rtp_handle, url, AVIO_FLAG_READ_WRITE,
- &s->interrupt_callback, &opts, rt->protocols);
+ &s->interrupt_callback, &opts, rt->protocols, NULL);
av_dict_free(&opts);
if (ret)
localport += 2;
@@ -667,7 +667,7 @@ static int rtsp_listen(AVFormatContext *s)
"?listen&listen_timeout=%d", rt->initial_timeout * 1000);
if (ret = ffurl_open(&rt->rtsp_hd, tcpname, AVIO_FLAG_READ_WRITE,
- &s->interrupt_callback, NULL, rt->protocols)) {
+ &s->interrupt_callback, NULL, rt->protocols, NULL)) {
av_log(s, AV_LOG_ERROR, "Unable to open RTSP for listening\n");
return ret;
}
diff --git a/libavformat/sapdec.c b/libavformat/sapdec.c
index 0e99ace614..ce0ceaa81d 100644
--- a/libavformat/sapdec.c
+++ b/libavformat/sapdec.c
@@ -95,7 +95,7 @@ static int sap_read_header(AVFormatContext *s)
ff_url_join(url, sizeof(url), "udp", NULL, host, port, "?localport=%d",
port);
ret = ffurl_open(&sap->ann_fd, url, AVIO_FLAG_READ,
- &s->interrupt_callback, NULL, sap->protocols);
+ &s->interrupt_callback, NULL, sap->protocols, NULL);
if (ret)
goto fail;
diff --git a/libavformat/sapenc.c b/libavformat/sapenc.c
index 5786644056..ed3a0245af 100644
--- a/libavformat/sapenc.c
+++ b/libavformat/sapenc.c
@@ -160,7 +160,7 @@ static int sap_write_header(AVFormatContext *s)
if (!same_port)
base_port += 2;
ret = ffurl_open(&fd, url, AVIO_FLAG_WRITE, &s->interrupt_callback, NULL,
- sap->protocols);
+ sap->protocols, NULL);
if (ret) {
ret = AVERROR(EIO);
goto fail;
@@ -179,7 +179,7 @@ static int sap_write_header(AVFormatContext *s)
ff_url_join(url, sizeof(url), "udp", NULL, announce_addr, port,
"?ttl=%d&connect=1", ttl);
ret = ffurl_open(&sap->ann_fd, url, AVIO_FLAG_WRITE,
- &s->interrupt_callback, NULL, sap->protocols);
+ &s->interrupt_callback, NULL, sap->protocols, NULL);
if (ret) {
ret = AVERROR(EIO);
goto fail;
diff --git a/libavformat/smoothstreamingenc.c b/libavformat/smoothstreamingenc.c
index 8eba9c9a45..bf1f8d49d6 100644
--- a/libavformat/smoothstreamingenc.c
+++ b/libavformat/smoothstreamingenc.c
@@ -126,7 +126,7 @@ static int64_t ism_seek(void *opaque, int64_t offset, int whence)
os->tail_out = os->out;
av_dict_set(&opts, "truncate", "0", 0);
ret = ffurl_open(&os->out, frag->file, AVIO_FLAG_WRITE, &os->ctx->interrupt_callback, &opts,
- os->protocols);
+ os->protocols, NULL);
av_dict_free(&opts);
if (ret < 0) {
os->out = os->tail_out;
@@ -135,7 +135,7 @@ static int64_t ism_seek(void *opaque, int64_t offset, int whence)
}
av_dict_set(&opts, "truncate", "0", 0);
ffurl_open(&os->out2, frag->infofile, AVIO_FLAG_WRITE, &os->ctx->interrupt_callback, &opts,
- os->protocols);
+ os->protocols, NULL);
av_dict_free(&opts);
ffurl_seek(os->out, offset - frag->start_pos, SEEK_SET);
if (os->out2)
@@ -541,7 +541,7 @@ static int ism_flush(AVFormatContext *s, int final)
snprintf(filename, sizeof(filename), "%s/temp", os->dirname);
ret = ffurl_open(&os->out, filename, AVIO_FLAG_WRITE, &s->interrupt_callback, NULL,
- c->protocols);
+ c->protocols, NULL);
if (ret < 0)
break;
os->cur_start_pos = os->tail_pos;
diff --git a/libavformat/srtpproto.c b/libavformat/srtpproto.c
index 2c64f451aa..e6e035aa3e 100644
--- a/libavformat/srtpproto.c
+++ b/libavformat/srtpproto.c
@@ -81,7 +81,7 @@ static int srtp_open(URLContext *h, const char *uri, int flags)
path, sizeof(path), uri);
ff_url_join(buf, sizeof(buf), "rtp", NULL, hostname, rtp_port, "%s", path);
if ((ret = ffurl_open(&s->rtp_hd, buf, flags, &h->interrupt_callback, NULL,
- h->protocols)) < 0)
+ h->protocols, h)) < 0)
goto fail;
h->max_packet_size = FFMIN(s->rtp_hd->max_packet_size,
diff --git a/libavformat/tls.c b/libavformat/tls.c
index a2a1ffe36d..fab243e93e 100644
--- a/libavformat/tls.c
+++ b/libavformat/tls.c
@@ -76,5 +76,5 @@ int ff_tls_open_underlying(TLSShared *c, URLContext *parent, const char *uri, AV
}
return ffurl_open(&c->tcp, buf, AVIO_FLAG_READ_WRITE,
- &parent->interrupt_callback, options, parent->protocols);
+ &parent->interrupt_callback, options, parent->protocols, parent);
}
diff --git a/libavformat/url.h b/libavformat/url.h
index 408c674ddf..5cbfd1a942 100644
--- a/libavformat/url.h
+++ b/libavformat/url.h
@@ -137,12 +137,14 @@ int ffurl_connect(URLContext *uc, AVDictionary **options);
* @param protocols a NULL-terminate list of protocols available for use by
* this context and its children. The caller must ensure this
* list remains valid until the context is closed.
+ * @param parent An enclosing URLContext, whose generic options should
+ * be applied to this URLContext as well.
* @return 0 in case of success, a negative value corresponding to an
* AVERROR code in case of failure
*/
int ffurl_open(URLContext **puc, const char *filename, int flags,
const AVIOInterruptCB *int_cb, AVDictionary **options,
- const URLProtocol **protocols);
+ const URLProtocol **protocols, URLContext *parent);
/**
* Read up to size bytes from the resource accessed by h, and store