You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-11-06 08:29:25 +02:00
avformat/teeproto: Support parsing protocol options
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
This commit is contained in:
@@ -566,7 +566,7 @@ OBJS-$(CONFIG_RTP_PROTOCOL) += rtpproto.o
|
|||||||
OBJS-$(CONFIG_SCTP_PROTOCOL) += sctp.o
|
OBJS-$(CONFIG_SCTP_PROTOCOL) += sctp.o
|
||||||
OBJS-$(CONFIG_SRTP_PROTOCOL) += srtpproto.o srtp.o
|
OBJS-$(CONFIG_SRTP_PROTOCOL) += srtpproto.o srtp.o
|
||||||
OBJS-$(CONFIG_SUBFILE_PROTOCOL) += subfile.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_TCP_PROTOCOL) += tcp.o
|
||||||
OBJS-$(CONFIG_TLS_GNUTLS_PROTOCOL) += tls_gnutls.o tls.o
|
OBJS-$(CONFIG_TLS_GNUTLS_PROTOCOL) += tls_gnutls.o tls.o
|
||||||
OBJS-$(CONFIG_TLS_OPENSSL_PROTOCOL) += tls_openssl.o tls.o
|
OBJS-$(CONFIG_TLS_OPENSSL_PROTOCOL) += tls_openssl.o tls.o
|
||||||
|
|||||||
@@ -23,6 +23,7 @@
|
|||||||
#include "libavutil/opt.h"
|
#include "libavutil/opt.h"
|
||||||
#include "avformat.h"
|
#include "avformat.h"
|
||||||
#include "avio_internal.h"
|
#include "avio_internal.h"
|
||||||
|
#include "tee_common.h"
|
||||||
|
|
||||||
typedef struct ChildContext {
|
typedef struct ChildContext {
|
||||||
URLContext *url_context;
|
URLContext *url_context;
|
||||||
@@ -89,9 +90,11 @@ static int tee_open(URLContext *h, const char *filename, int flags)
|
|||||||
return AVERROR(ENOSYS);
|
return AVERROR(ENOSYS);
|
||||||
|
|
||||||
while (*filename) {
|
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;
|
void *tmp;
|
||||||
if (!child_name) {
|
AVDictionary *options = NULL;
|
||||||
|
if (!child_string) {
|
||||||
ret = AVERROR(ENOMEM);
|
ret = AVERROR(ENOMEM);
|
||||||
goto fail;
|
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));
|
tmp = av_realloc_array(c->child, c->child_count + 1, sizeof(*c->child));
|
||||||
if (!tmp) {
|
if (!tmp) {
|
||||||
ret = AVERROR(ENOMEM);
|
ret = AVERROR(ENOMEM);
|
||||||
goto fail;
|
goto loop_fail;
|
||||||
}
|
}
|
||||||
c->child = tmp;
|
c->child = tmp;
|
||||||
memset(&c->child[c->child_count], 0, sizeof(c->child[c->child_count]));
|
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,
|
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->protocol_whitelist, h->protocol_blacklist,
|
||||||
h);
|
h);
|
||||||
av_free(child_name);
|
loop_fail:
|
||||||
|
av_freep(&child_string);
|
||||||
|
av_dict_free(&options);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
goto fail;
|
goto fail;
|
||||||
c->child_count++;
|
c->child_count++;
|
||||||
|
|||||||
Reference in New Issue
Block a user