|
|
@ -145,8 +145,31 @@ static int url_alloc_for_protocol (URLContext **puc, struct URLProtocol *up, |
|
|
|
if (up->priv_data_size) { |
|
|
|
if (up->priv_data_size) { |
|
|
|
uc->priv_data = av_mallocz(up->priv_data_size); |
|
|
|
uc->priv_data = av_mallocz(up->priv_data_size); |
|
|
|
if (up->priv_data_class) { |
|
|
|
if (up->priv_data_class) { |
|
|
|
|
|
|
|
char *start = strchr(uc->filename, ','); |
|
|
|
*(const AVClass**)uc->priv_data = up->priv_data_class; |
|
|
|
*(const AVClass**)uc->priv_data = up->priv_data_class; |
|
|
|
av_opt_set_defaults(uc->priv_data); |
|
|
|
av_opt_set_defaults(uc->priv_data); |
|
|
|
|
|
|
|
if(start){ |
|
|
|
|
|
|
|
int ret= 0; |
|
|
|
|
|
|
|
char *p= start; |
|
|
|
|
|
|
|
char sep= *++p; |
|
|
|
|
|
|
|
char *key, *val; |
|
|
|
|
|
|
|
p++; |
|
|
|
|
|
|
|
while(ret >= 0 && (key= strchr(p, sep)) && p<key && (val = strchr(key+1, sep))){ |
|
|
|
|
|
|
|
*val= *key= 0; |
|
|
|
|
|
|
|
ret= av_opt_set(uc->priv_data, p, key+1, 0); |
|
|
|
|
|
|
|
if (ret == AVERROR_OPTION_NOT_FOUND) |
|
|
|
|
|
|
|
av_log(uc, AV_LOG_ERROR, "Key '%s' not found.\n", p); |
|
|
|
|
|
|
|
*val= *key= sep; |
|
|
|
|
|
|
|
p= val+1; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if(ret<0 || p!=key){ |
|
|
|
|
|
|
|
av_log(uc, AV_LOG_ERROR, "Error parsing options string %s\n", start); |
|
|
|
|
|
|
|
av_freep(&uc->priv_data); |
|
|
|
|
|
|
|
av_freep(&uc); |
|
|
|
|
|
|
|
goto fail; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
memmove(start, key+1, strlen(key)); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
if (int_cb) |
|
|
|
if (int_cb) |
|
|
@ -277,6 +300,8 @@ int ffurl_alloc(URLContext **puc, const char *filename, int flags, |
|
|
|
else |
|
|
|
else |
|
|
|
av_strlcpy(proto_str, filename, FFMIN(proto_end-filename+1, sizeof(proto_str))); |
|
|
|
av_strlcpy(proto_str, filename, FFMIN(proto_end-filename+1, sizeof(proto_str))); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if ((ptr = strchr(proto_str, ','))) |
|
|
|
|
|
|
|
*ptr = '\0'; |
|
|
|
av_strlcpy(proto_nested, proto_str, sizeof(proto_nested)); |
|
|
|
av_strlcpy(proto_nested, proto_str, sizeof(proto_nested)); |
|
|
|
if ((ptr = strchr(proto_nested, '+'))) |
|
|
|
if ((ptr = strchr(proto_nested, '+'))) |
|
|
|
*ptr = '\0'; |
|
|
|
*ptr = '\0'; |
|
|
|