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 */ | ||||