It needs to access the list of protocols directly, so it more properly belongs there.tags/n3.1
@@ -49,25 +49,6 @@ static void *urlcontext_child_next(void *obj, void *prev) | |||||
return NULL; | return NULL; | ||||
} | } | ||||
static const AVClass *urlcontext_child_class_next(const AVClass *prev) | |||||
{ | |||||
int i; | |||||
/* find the protocol that corresponds to prev */ | |||||
for (i = 0; ff_url_protocols[i]; i++) { | |||||
if (ff_url_protocols[i]->priv_data_class == prev) { | |||||
i++; | |||||
break; | |||||
} | |||||
} | |||||
/* find next protocol with priv options */ | |||||
for (; ff_url_protocols[i]; i++) | |||||
if (ff_url_protocols[i]->priv_data_class) | |||||
return ff_url_protocols[i]->priv_data_class; | |||||
return NULL; | |||||
} | |||||
static const AVOption options[] = { { NULL } }; | static const AVOption options[] = { { NULL } }; | ||||
const AVClass ffurl_context_class = { | const AVClass ffurl_context_class = { | ||||
.class_name = "URLContext", | .class_name = "URLContext", | ||||
@@ -75,7 +56,7 @@ const AVClass ffurl_context_class = { | |||||
.option = options, | .option = options, | ||||
.version = LIBAVUTIL_VERSION_INT, | .version = LIBAVUTIL_VERSION_INT, | ||||
.child_next = urlcontext_child_next, | .child_next = urlcontext_child_next, | ||||
.child_class_next = urlcontext_child_class_next, | |||||
.child_class_next = ff_urlcontext_child_class_next, | |||||
}; | }; | ||||
/*@}*/ | /*@}*/ | ||||
@@ -163,6 +163,26 @@ const URLProtocol *ff_url_protocols[] = { | |||||
NULL, | NULL, | ||||
}; | }; | ||||
const AVClass *ff_urlcontext_child_class_next(const AVClass *prev) | |||||
{ | |||||
int i; | |||||
/* find the protocol that corresponds to prev */ | |||||
for (i = 0; ff_url_protocols[i]; i++) { | |||||
if (ff_url_protocols[i]->priv_data_class == prev) { | |||||
i++; | |||||
break; | |||||
} | |||||
} | |||||
/* find next protocol with priv options */ | |||||
for (; ff_url_protocols[i]; i++) | |||||
if (ff_url_protocols[i]->priv_data_class) | |||||
return ff_url_protocols[i]->priv_data_class; | |||||
return NULL; | |||||
} | |||||
const char *avio_enum_protocols(void **opaque, int output) | const char *avio_enum_protocols(void **opaque, int output) | ||||
{ | { | ||||
const URLProtocol **p = *opaque; | const URLProtocol **p = *opaque; | ||||
@@ -264,6 +264,8 @@ int ff_url_join(char *str, int size, const char *proto, | |||||
void ff_make_absolute_url(char *buf, int size, const char *base, | void ff_make_absolute_url(char *buf, int size, const char *base, | ||||
const char *rel); | const char *rel); | ||||
const AVClass *ff_urlcontext_child_class_next(const AVClass *prev); | |||||
extern const URLProtocol *ff_url_protocols[]; | extern const URLProtocol *ff_url_protocols[]; | ||||
#endif /* AVFORMAT_URL_H */ | #endif /* AVFORMAT_URL_H */ |