avio: add a function for iterating though protocol names.
authorAnton Khirnov <anton@khirnov.net>
Mon, 4 Apr 2011 06:18:54 +0000 (08:18 +0200)
committerAnton Khirnov <anton@khirnov.net>
Fri, 8 Apr 2011 15:48:44 +0000 (17:48 +0200)
libavformat/avio.c
libavformat/avio.h

index e043058..ab7a7f5 100644 (file)
@@ -57,6 +57,16 @@ URLProtocol *av_protocol_next(URLProtocol *p)
     else  return first_protocol;
 }
 
+const char *avio_enum_protocols(void **opaque, int output)
+{
+    URLProtocol **p = opaque;
+    *p = *p ? (*p)->next : first_protocol;
+    if (!*p) return NULL;
+    if ((output && (*p)->url_write) || (!output && (*p)->url_read))
+        return (*p)->name;
+    return avio_enum_protocols(opaque, output);
+}
+
 int ffurl_register_protocol(URLProtocol *protocol, int size)
 {
     URLProtocol **p;
index c39d2a0..9ea138e 100644 (file)
@@ -600,4 +600,17 @@ int avio_close_dyn_buf(AVIOContext *s, uint8_t **pbuffer);
 int udp_get_file_handle(URLContext *h);
 #endif
 
+/**
+ * Iterate through names of available protocols.
+ *
+ * @param opaque A private pointer representing current protocol.
+ *        It must be a pointer to NULL on first iteration and will
+ *        be updated by successive calls to avio_enum_protocols.
+ * @param output If set to 1, iterate over output protocols,
+ *               otherwise over input protocols.
+ *
+ * @return A static string containing the name of current protocol or NULL
+ */
+const char *avio_enum_protocols(void **opaque, int output);
+
 #endif /* AVFORMAT_AVIO_H */