From e68c06c404adf0da953d71d5ff11c7fd71f80c1c Mon Sep 17 00:00:00 2001 From: Daniel Caujolle-Bert Date: Sun, 2 Nov 2003 23:05:55 +0000 Subject: add some missing plugins listing functions. CVS patchset: 5680 CVS date: 2003/11/02 23:05:55 --- include/xine.h.in | 15 ++++- src/xine-engine/load_plugins.c | 131 +++++++++++++++++++++++------------------ 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; } -- cgit v1.2.3