summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Caujolle-Bert <f1rmb@users.sourceforge.net>2003-11-02 23:05:55 +0000
committerDaniel Caujolle-Bert <f1rmb@users.sourceforge.net>2003-11-02 23:05:55 +0000
commite68c06c404adf0da953d71d5ff11c7fd71f80c1c (patch)
tree61a1d2bf3257948642efae9d6c859b4e17c56c4b
parent286fe9526355b2ac06890478edc955129d11742e (diff)
downloadxine-lib-e68c06c404adf0da953d71d5ff11c7fd71f80c1c.tar.gz
xine-lib-e68c06c404adf0da953d71d5ff11c7fd71f80c1c.tar.bz2
add some missing plugins listing functions.
CVS patchset: 5680 CVS date: 2003/11/02 23:05:55
-rw-r--r--include/xine.h.in15
-rw-r--r--src/xine-engine/load_plugins.c131
2 files changed, 89 insertions, 57 deletions
diff --git a/include/xine.h.in b/include/xine.h.in
index c31b0506a..4c97ed829 100644
--- a/include/xine.h.in
+++ b/include/xine.h.in
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*
- * $Id: xine.h.in,v 1.102 2003/11/01 18:32:48 miguelfreitas Exp $
+ * $Id: xine.h.in,v 1.103 2003/11/02 23:05:55 f1rmb Exp $
*
* public xine-lib (libxine) interface and documentation
*
@@ -950,6 +950,19 @@ const char *xine_get_input_plugin_description (xine_t *self,
const char *const *xine_list_audio_output_plugins (xine_t *self) ;
const char *const *xine_list_video_output_plugins (xine_t *self) ;
+/* get list of available demultiplexor plugins */
+const char *const *xine_list_demuxer_plugins(xine_t *self);
+
+/* get list of available input plugins */
+const char *const *xine_list_input_plugins(xine_t *self);
+
+/* get list of available subpicture plugins */
+const char *const *xine_list_spu_plugins(xine_t *self);
+
+/* get list of available audio and video decoder plugins */
+const char *const *xine_list_audio_decoder_plugins(xine_t *self);
+const char *const *xine_list_video_decoder_plugins(xine_t *self);
+
/*********************************************************************
* visual specific gui <-> xine engine communication *
diff --git a/src/xine-engine/load_plugins.c b/src/xine-engine/load_plugins.c
index 2a263c297..2aafe4e57 100644
--- a/src/xine-engine/load_plugins.c
+++ b/src/xine-engine/load_plugins.c
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*
- * $Id: load_plugins.c,v 1.160 2003/11/02 14:12:52 valtri Exp $
+ * $Id: load_plugins.c,v 1.161 2003/11/02 23:05:55 f1rmb Exp $
*
*
* Load input/demux/audio_out/video_out/codec plugins
@@ -87,6 +87,21 @@ static void remove_segv_handler(void){
#endif
#endif /* 0 */
+
+static void _build_list_typed_plugins(plugin_catalog_t **catalog, xine_list_t *type) {
+ plugin_node_t *node;
+ int i = 0;
+
+ node = xine_list_first_content (type);
+ while (node) {
+ (*catalog)->ids[i] = node->info->id;
+ i++;
+ node = xine_list_next_content (type);
+ }
+ (*catalog)->ids[i] = NULL;
+}
+
+
/*
* plugin list/catalog management functions
*
@@ -1422,57 +1437,21 @@ xine_video_port_t *xine_new_framegrab_video_port (xine_t *this) {
* audio output plugins section
*/
-const char *const *xine_list_audio_output_plugins (xine_t *this) {
-
- plugin_catalog_t *catalog;
- int i;
- plugin_node_t *node;
-
- catalog = this->plugin_catalog;
-
+const char *const *xine_list_audio_output_plugins (xine_t *xine) {
+ plugin_catalog_t *catalog = xine->plugin_catalog;
+
pthread_mutex_lock (&catalog->lock);
-
- i = 0;
- node = xine_list_first_content (catalog->aout);
- while (node) {
-
- catalog->ids[i] = node->info->id;
-
- i++;
-
- node = xine_list_next_content (catalog->aout);
- }
-
- catalog->ids[i] = NULL;
-
+ _build_list_typed_plugins(&catalog, catalog->aout);
pthread_mutex_unlock (&catalog->lock);
return catalog->ids;
}
-const char *const *xine_list_video_output_plugins (xine_t *this) {
-
- plugin_catalog_t *catalog;
- int i;
- plugin_node_t *node;
-
- catalog = this->plugin_catalog;
-
+const char *const *xine_list_video_output_plugins (xine_t *xine) {
+ plugin_catalog_t *catalog = xine->plugin_catalog;
+
pthread_mutex_lock (&catalog->lock);
-
- i = 0;
- node = xine_list_first_content (catalog->vout);
- while (node) {
-
- catalog->ids[i] = node->info->id;
-
- i++;
-
- node = xine_list_next_content (catalog->vout);
- }
-
- catalog->ids[i] = NULL;
-
+ _build_list_typed_plugins(&catalog, catalog->vout);
pthread_mutex_unlock (&catalog->lock);
return catalog->ids;
@@ -1866,23 +1845,63 @@ void free_spu_decoder (xine_stream_t *stream, spu_decoder_t *sd) {
pthread_mutex_unlock (&catalog->lock);
}
-const char *const *xine_list_post_plugins(xine_t *xine) {
+const char *const *xine_list_demuxer_plugins(xine_t *xine) {
plugin_catalog_t *catalog = xine->plugin_catalog;
- plugin_node_t *node;
- int i;
pthread_mutex_lock (&catalog->lock);
+ _build_list_typed_plugins(&catalog, catalog->demux);
+ pthread_mutex_unlock (&catalog->lock);
- i = 0;
- node = xine_list_first_content (catalog->post);
- while (node) {
- catalog->ids[i] = node->info->id;
- i++;
- node = xine_list_next_content (catalog->post);
- }
- catalog->ids[i] = NULL;
+ return catalog->ids;
+}
+const char *const *xine_list_input_plugins(xine_t *xine) {
+ plugin_catalog_t *catalog = xine->plugin_catalog;
+
+ pthread_mutex_lock (&catalog->lock);
+ _build_list_typed_plugins(&catalog, catalog->input);
+ pthread_mutex_unlock (&catalog->lock);
+
+ return catalog->ids;
+}
+
+const char *const *xine_list_spu_plugins(xine_t *xine) {
+ plugin_catalog_t *catalog = xine->plugin_catalog;
+
+ pthread_mutex_lock (&catalog->lock);
+ _build_list_typed_plugins(&catalog, catalog->spu);
pthread_mutex_unlock (&catalog->lock);
+
+ return catalog->ids;
+}
+
+const char *const *xine_list_audio_decoder_plugins(xine_t *xine) {
+ plugin_catalog_t *catalog = xine->plugin_catalog;
+
+ pthread_mutex_lock (&catalog->lock);
+ _build_list_typed_plugins(&catalog, catalog->audio);
+ pthread_mutex_unlock (&catalog->lock);
+
+ return catalog->ids;
+}
+
+const char *const *xine_list_video_decoder_plugins(xine_t *xine) {
+ plugin_catalog_t *catalog = xine->plugin_catalog;
+
+ pthread_mutex_lock (&catalog->lock);
+ _build_list_typed_plugins(&catalog, catalog->video);
+ pthread_mutex_unlock (&catalog->lock);
+
+ return catalog->ids;
+}
+
+const char *const *xine_list_post_plugins(xine_t *xine) {
+ plugin_catalog_t *catalog = xine->plugin_catalog;
+
+ pthread_mutex_lock (&catalog->lock);
+ _build_list_typed_plugins(&catalog, catalog->post);
+ pthread_mutex_unlock (&catalog->lock);
+
return catalog->ids;
}