From b1ce8003727655c627fc3f80a8120d7e9c191c69 Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Mon, 1 Aug 2016 02:34:23 +0200 Subject: [PATCH] avformat/teeproto: Support parsing protocol options Signed-off-by: Michael Niedermayer --- libavformat/Makefile | 2 +- libavformat/teeproto.c | 19 ++++++++++++++----- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/libavformat/Makefile b/libavformat/Makefile index 6a1d98b9f1..e2cb474396 100644 --- a/libavformat/Makefile +++ b/libavformat/Makefile @@ -566,7 +566,7 @@ OBJS-$(CONFIG_RTP_PROTOCOL) += rtpproto.o OBJS-$(CONFIG_SCTP_PROTOCOL) += sctp.o OBJS-$(CONFIG_SRTP_PROTOCOL) += srtpproto.o srtp.o OBJS-$(CONFIG_SUBFILE_PROTOCOL) += subfile.o -OBJS-$(CONFIG_TEE_PROTOCOL) += teeproto.o +OBJS-$(CONFIG_TEE_PROTOCOL) += teeproto.o tee_common.o OBJS-$(CONFIG_TCP_PROTOCOL) += tcp.o OBJS-$(CONFIG_TLS_GNUTLS_PROTOCOL) += tls_gnutls.o tls.o OBJS-$(CONFIG_TLS_OPENSSL_PROTOCOL) += tls_openssl.o tls.o 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++;