+typedef struct AVIOInternal {
+ const AVClass *class;
+
+ char *protocol_whitelist;
+ char *protocol_blacklist;
+
+ URLContext *h;
+ const URLProtocol **protocols;
+} AVIOInternal;
+
+static void *io_priv_child_next(void *obj, void *prev)
+{
+ AVIOInternal *internal = obj;
+ return prev ? NULL : internal->h;
+}
+
+static const AVClass *io_priv_child_class_next(const AVClass *prev)
+{
+ return prev ? NULL : &ffurl_context_class;
+}
+
+#define OFFSET(x) offsetof(AVIOInternal, x)
+static const AVOption io_priv_options[] = {
+ { "protocol_whitelist", "A comma-separated list of allowed protocols",
+ OFFSET(protocol_whitelist), AV_OPT_TYPE_STRING },
+ { "protocol_blacklist", "A comma-separated list of forbidden protocols",
+ OFFSET(protocol_whitelist), AV_OPT_TYPE_STRING },
+ { NULL },
+};
+
+static const AVClass io_priv_class = {
+ .class_name = "AVIOContext",
+ .item_name = av_default_item_name,
+ .version = LIBAVUTIL_VERSION_INT,
+ .option = io_priv_options,
+ .child_next = io_priv_child_next,
+ .child_class_next = io_priv_child_class_next,
+};
+
+static void *ff_avio_child_next(void *obj, void *prev)