summaryrefslogtreecommitdiff
path: root/libavformat/teeproto.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michael@niedermayer.cc>2016-08-01 02:34:23 +0200
committerMichael Niedermayer <michael@niedermayer.cc>2016-08-03 19:40:26 +0200
commitb1ce8003727655c627fc3f80a8120d7e9c191c69 (patch)
tree2d65621951777a6bb81471acc165e02128f76d62 /libavformat/teeproto.c
parentc5cc3b08e56fc95665977544486bd9f06e4b7a72 (diff)
downloadffmpeg-b1ce8003727655c627fc3f80a8120d7e9c191c69.tar.gz
avformat/teeproto: Support parsing protocol options
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
Diffstat (limited to 'libavformat/teeproto.c')
-rw-r--r--libavformat/teeproto.c19
1 files changed, 14 insertions, 5 deletions
diff --git a/libavformat/teeproto.c b/libavformat/teeproto.c
index 12d5423b5b..e22fba2d40 100644
--- a/libavformat/teeproto.c
+++ b/libavformat/teeproto.c
@@ -23,6 +23,7 @@
#include "libavutil/opt.h"
#include "avformat.h"
#include "avio_internal.h"
+#include "tee_common.h"
typedef struct ChildContext {
URLContext *url_context;
@@ -89,9 +90,11 @@ static int tee_open(URLContext *h, const char *filename, int flags)
return AVERROR(ENOSYS);
while (*filename) {
- char *child_name = av_get_token(&filename, child_delim);
+ char *child_string = av_get_token(&filename, child_delim);
+ char *child_name = NULL;
void *tmp;
- if (!child_name) {
+ AVDictionary *options = NULL;
+ if (!child_string) {
ret = AVERROR(ENOMEM);
goto fail;
}
@@ -99,16 +102,22 @@ static int tee_open(URLContext *h, const char *filename, int flags)
tmp = av_realloc_array(c->child, c->child_count + 1, sizeof(*c->child));
if (!tmp) {
ret = AVERROR(ENOMEM);
- goto fail;
+ goto loop_fail;
}
c->child = tmp;
memset(&c->child[c->child_count], 0, sizeof(c->child[c->child_count]));
+ ret = ff_tee_parse_slave_options(h, child_string, &options, &child_name);
+ if (ret < 0)
+ goto loop_fail;
+
ret = ffurl_open_whitelist(&c->child[c->child_count].url_context, child_name, flags,
- &h->interrupt_callback, /*AVDictionary **options*/NULL,
+ &h->interrupt_callback, &options,
h->protocol_whitelist, h->protocol_blacklist,
h);
- av_free(child_name);
+loop_fail:
+ av_freep(&child_string);
+ av_dict_free(&options);
if (ret < 0)
goto fail;
c->child_count++;