xine-lib: xine-lib-1.2.13/src/xine-engine/load_plugins.c File Reference

xine-lib 1.2.13-20230125hg15249

Data Structures | Macros | Typedefs | Enumerations | Functions | Variables
load_plugins.c File Reference
`#include <inttypes.h>`
`#include <sys/types.h>`
`#include <sys/stat.h>`
`#include <unistd.h>`
`#include <pthread.h>`
`#include <dlfcn.h>`
`#include <string.h>`
`#include <errno.h>`
`#include <stdlib.h>`
`#include <stdio.h>`
`#include <ctype.h>`
`#include <signal.h>`
`#include <basedir.h>`
`#include <xine/xine_internal.h>`
`#include <xine/xine_plugin.h>`
`#include <xine/plugin_catalog.h>`
`#include <xine/demux.h>`
`#include <xine/input_plugin.h>`
`#include <xine/video_out.h>`
`#include <xine/post.h>`
`#include <xine/xine_module.h>`
`#include <xine/metronom.h>`
`#include <xine/configfile.h>`
`#include <xine/xineutils.h>`
`#include <xine/compat.h>`
`#include "xine_private.h"`

## Data Structures
union | all_info_t
struct | fat_node_st
struct | new_entry_data_t
struct | _load_plugins_dupl_cfg_t

## Macros
#define | LOG_MODULE "load_plugins"
#define | LOG_VERBOSE
#define | XINE_ENABLE_EXPERIMENTAL_FEATURES 1
#define | FAST_SCAN_PLUGINS
#define | CACHE_CATALOG_VERSION 5
#define | CACHE_CATALOG_VERSION_STR "5"
#define | MAX_DUPL_CFG_ENTRIES 256
#define | __Max(a, b) ((a) > (b) ? (a) : (b))
#define | FAT_NODE_FLAG_PROBE_CLASS 1
#define | IS_FAT_NODE(_node) (_node->node.info == &_node->info[0])
#define | SAVE_PLUGIN_BUF_SIZE 4096
#define | XSP_BUFSIZE 4096
#define | GET_PLUGIN_DESC(NAME, TYPE, CATITEM)

## Typedefs
typedef struct fat_node_st | fat_node_t

## Enumerations
enum | _k_t { _K_NONE = 0 , _K_cache_catalog_version , _K_flush , _K_filename , _K_size , _K_mtime , _K_type , _K_api , _K_id , _K_version , _K_visual_type , _K_supported_types , _K_vo_priority , _K_ao_priority , _K_decoder_priority , _K_demuxer_priority , _K_input_priority , _K_post_type , _K_config_key , _K_module_priority , _K_module_sub_type , _K_module_type , _K_LAST }

## Functions
static void | _fat_node_init (fat_node_t *node)
static int | _fat_node_file_cmp (void *a_gen, void *b_gen)
static void | _mime_set (uint8_t *buf, size_t bsize, const char *needle)
static int | _mime_find (uint8_t *buf, const char *haystack)
static const char *const * | _build_list_typed_plugins (xine_t *xine, int type, uint64_t mask)
static void | inc_file_ref (plugin_file_t *file)
static void | dec_file_ref (plugin_file_t *file)
static void | inc_node_ref (plugin_node_t *node)
static void | dec_node_ref (plugin_node_t *node)
static void | map_decoder_list (xine_t *this, xine_sarray_t *decoder_list, plugin_node_t *decoder_map[DECODER_MAX][PLUGINS_PER_TYPE])
static void | map_decoders (xine_t *this)
static void | _decoder_priority_cb (void *data, xine_cfg_entry_t *cfg)
static plugin_file_t * | _insert_file (xine_list_t *list, const char *filename, const struct stat *statbuffer, void *lib, uint32_t name_len)
static int | _insert_node (xine_t *this, plugin_file_t *file, fat_node_t *node_cache, const plugin_info_t *info, uint32_t flags)
static int | _plugin_node_comparator (void *a, void *b)
static int | _post_plugin_node_comparator (void *a, void *b)
static plugin_catalog_t * | _new_catalog (void)
static void | _register_plugins_internal (xine_t *this, plugin_file_t *file, fat_node_t *node_cache, const plugin_info_t *info, uint32_t flags)
void | xine_register_plugins (xine_t *self, const plugin_info_t *info)
static void | collect_plugins (xine_t *this, char *path, char *stop, char *pend)
static int | _plugin_info_equal (const plugin_info_t *a, const plugin_info_t *b)
static void | _new_entry_cb (void *user_data, xine_cfg_entry_t *entry)
static int | _load_plugin_class (xine_t *this, plugin_node_t *node, const void *data)
static void | _dispose_plugin_class (plugin_node_t *node)
static void | _load_required_plugins (xine_t *this, xine_sarray_t *list)
static void | load_required_plugins (xine_t *this)
static unsigned int | _cfg_entry_hash (void *a)
static int | _cfg_entry_cmp (void *a, void *b)
static void | save_plugin_list (xine_t *this, FILE *fp, xine_sarray_t *list, _load_plugins_dupl_cfg_t *cfg)
static _k_t | _key_2_index (const char *key, size_t klen)
static void | load_plugin_list (xine_t *this, const char *filename, xine_sarray_t *plugins)
static size_t | catalog_filename (xine_t *this, char *buf, size_t bsize, int createdir)
| Returns the complete filename for the plugins' cache file.
static void | save_catalog (xine_t *this)
static void | load_cached_catalog (xine_t *this)
int | _x_scan_plugins (xine_t *this_gen)
| Load plugins into catalog.
xine_module_t * | _x_find_module (xine_t *xine, const char *type, const char *id, unsigned sub_type, const void *params)
void | _x_free_module (xine_t *xine, xine_module_t **pmodule)
input_plugin_t * | _x_find_input_plugin (xine_stream_t *stream, const char *mrl)
void | _x_free_input_plugin (xine_stream_t *stream, input_plugin_t *input)
demux_plugin_t * | _x_find_demux_plugin (xine_stream_t *stream, input_plugin_t *input)
demux_plugin_t * | _x_find_demux_plugin_by_name (xine_stream_t *stream, const char *name, input_plugin_t *input)
demux_plugin_t * | _x_find_demux_plugin_last_probe (xine_stream_t *stream, const char *last_demux_name, input_plugin_t *input)
void | _x_free_demux_plugin (xine_stream_t *stream, demux_plugin_t **pdemux)
const char *const * | xine_get_autoplay_input_plugin_ids (xine_t *this)
const char *const * | xine_get_browsable_input_plugin_ids (xine_t *this)
static vo_driver_t * | _load_video_driver (xine_t *this, plugin_node_t *node, const void *data)
vo_driver_t * | _x_load_video_output_plugin (xine_t *this, const char *id, int visual_type, const void *visual)
xine_video_port_t * | xine_open_video_driver (xine_t *this, const char *id, int visual_type, const void *visual)
xine_video_port_t * | xine_new_framegrab_video_port (xine_t *this)
const char *const * | xine_list_audio_output_plugins (xine_t *xine)
const char *const * | xine_list_video_output_plugins (xine_t *xine)
const char *const * | xine_list_video_output_plugins_typed (xine_t *xine, uint64_t typemask)
static ao_driver_t * | _load_audio_driver (xine_t *this, plugin_node_t *node, const void *data)
ao_driver_t * | _x_load_audio_output_plugin (xine_t *this, const char *id)
xine_audio_port_t * | xine_open_audio_driver (xine_t *this, const char *id, const void *data)
xine_audio_port_t * | xine_new_framegrab_audio_port (xine_t *this)
void | _x_free_audio_driver (xine_t *xine, ao_driver_t **pdriver)
void | _x_free_video_driver (xine_t *xine, vo_driver_t **pdriver)
void | xine_close_audio_driver (xine_t *this, xine_audio_port_t *ao_port)
void | xine_close_video_driver (xine_t *this, xine_video_port_t *vo_port)
static input_class_t * | _get_input_class (xine_t *this, const char *plugin_id)
const char *const * | xine_get_autoplay_mrls (xine_t *this, const char *plugin_id, int *num_mrls)
xine_mrl_t ** | xine_get_browse_mrls (xine_t *this, const char *plugin_id, const char *start_mrl, int *num_mrls)
video_decoder_t * | _x_get_video_decoder (xine_stream_t *stream, uint8_t stream_type)
void | _x_free_video_decoder (xine_stream_t *stream, video_decoder_t *vd)
audio_decoder_t * | _x_get_audio_decoder (xine_stream_t *stream, uint8_t stream_type)
void | _x_free_audio_decoder (xine_stream_t *stream, audio_decoder_t *ad)
int | _x_decoder_available (xine_t *xine, uint32_t buftype)
static void | _unload_unref_plugin (xine_t *xine, plugin_node_t *node)
static void | _unload_unref_plugins (xine_t *xine, xine_sarray_t *list)
void | xine_plugins_garbage_collector (xine_t *self)
spu_decoder_t * | _x_get_spu_decoder (xine_stream_t *stream, uint8_t stream_type)
void | _x_free_spu_decoder (xine_stream_t *stream, spu_decoder_t *sd)
const char *const * | xine_list_demuxer_plugins (xine_t *xine)
const char *const * | xine_list_input_plugins (xine_t *xine)
const char *const * | xine_list_spu_plugins (xine_t *xine)
const char *const * | xine_list_audio_decoder_plugins (xine_t *xine)
const char *const * | xine_list_video_decoder_plugins (xine_t *xine)
const char *const * | xine_list_post_plugins (xine_t *xine)
const char *const * | xine_list_post_plugins_typed (xine_t *xine, uint32_t type)
const char * | xine_get_input_plugin_description (xine_t *this, const char *plugin_id)
const char * | xine_get_demux_plugin_description (xine_t *this, const char *plugin_id)
const char * | xine_get_spu_plugin_description (xine_t *this, const char *plugin_id)
const char * | xine_get_audio_plugin_description (xine_t *this, const char *plugin_id)
const char * | xine_get_video_plugin_description (xine_t *this, const char *plugin_id)
const char * | xine_get_audio_driver_plugin_description (xine_t *this, const char *plugin_id)
const char * | xine_get_video_driver_plugin_description (xine_t *this, const char *plugin_id)
const char * | xine_get_post_plugin_description (xine_t *this, const char *plugin_id)
xine_post_t * | xine_post_init (xine_t *xine_gen, const char *name, int inputs, xine_audio_port_t **audio_target, xine_video_port_t **video_target)
void | xine_post_dispose (xine_t *xine, xine_post_t *post_gen)
static char * | _get_demux_strings (xine_t *self, int kind)
char * | xine_get_file_extensions (xine_t *self)
char * | xine_get_mime_types (xine_t *self)
char * | xine_get_demux_for_mime_type (xine_t *xine, const char *mime_type)
static int | dispose_plugin_list (xine_sarray_t *list, int is_cache)
static void | dispose_plugin_file_list (xine_list_t *list)
void | _x_dispose_plugins (xine_t *this)
| Dispose (shutdown) all currently loaded plugins.

## Variables
static const uint8_t | plugin_iface_versions [((PLUGIN_TYPE_MAX) >(PLUGIN_XINE_MODULE) ?(PLUGIN_TYPE_MAX) :(PLUGIN_XINE_MODULE))+1]
static const uint8_t | tab_tolower [256]
static const uint8_t | tab_mime [256]

## Macro Definition Documentation

## ◆ __Max

#define __Max | ( |  | a,
|  |  | b ) ((a) > (b) ? (a) : (b))

## ◆ CACHE_CATALOG_VERSION

#define CACHE_CATALOG_VERSION 5

Referenced by load_plugin_list().

## ◆ CACHE_CATALOG_VERSION_STR

#define CACHE_CATALOG_VERSION_STR "5"

Referenced by save_catalog().

## ◆ FAST_SCAN_PLUGINS

#define FAST_SCAN_PLUGINS

## ◆ FAT_NODE_FLAG_PROBE_CLASS

#define FAT_NODE_FLAG_PROBE_CLASS 1

Referenced by _load_required_plugins(), _x_scan_plugins(), and collect_plugins().

## ◆ GET_PLUGIN_DESC

#define GET_PLUGIN_DESC | ( |  | NAME,
|  |  | TYPE,
|  |  | CATITEM )

Value:
const char *xine_get_##NAME##_plugin_description (xine_t *this, const char *plugin_id) { \
plugin_catalog_t *catalog = this->plugin_catalog; \
plugin_node_t *node; \
int list_id, list_size; \
pthread_mutex_lock (&catalog->lock); \
list_size = xine_sarray_size (catalog->plugin_lists[CATITEM - 1]); \
for (list_id = 0; list_id < list_size; list_id++) { \
node = xine_sarray_get (catalog->plugin_lists[CATITEM - 1], list_id); \
if (!strcasecmp (node->info->id, plugin_id)) { \
TYPE##_class_t *ic = (TYPE##_class_t *) node->plugin_class; \
const char *ret = NULL; \
if (!ic) { \
if (_load_plugin_class (this, node, NULL)) \
ic = node->plugin_class; \
} \
if (ic) \
ret = dgettext(ic->text_domain ? ic->text_domain : XINE_TEXTDOMAIN, ic->description); \
pthread_mutex_unlock (&catalog->lock); \
return ret; \
} \
} \
pthread_mutex_unlock (&catalog->lock); \
return NULL; \
}
XINE_TEXTDOMAIN
#define XINE_TEXTDOMAIN
Definition configure.h:925
_load_plugin_class
static int _load_plugin_class(xine_t *this, plugin_node_t *node, const void *data)
Definition load_plugins.c:1039
xine_sarray_get
void * xine_sarray_get(xine_sarray_t *sarray, unsigned int position)
Definition sorted_array.c:271
xine_sarray_size
size_t xine_sarray_size(const xine_sarray_t *sarray)
Definition sorted_array.c:257
plugin_catalog_s
Definition plugin_catalog.h:53
plugin_catalog_s::lock
pthread_mutex_t lock
Definition plugin_catalog.h:68
plugin_catalog_s::plugin_lists
xine_sarray_t * plugin_lists[PLUGIN_TYPE_MAX]
Definition plugin_catalog.h:54
plugin_info_t::id
const char * id
Definition xine_plugin.h:58
plugin_node_s
Definition plugin_catalog.h:44
plugin_node_s::info
plugin_info_t * info
Definition plugin_catalog.h:46
plugin_node_s::plugin_class
void * plugin_class
Definition plugin_catalog.h:47
xine_s
Definition xine_internal.h:80
NULL
NULL
Definition xine_plugin.c:78
dgettext
#define dgettext(Domain, Message)
Definition xineintl.h:42

## ◆ IS_FAT_NODE

#define IS_FAT_NODE | ( |  | _node | ) | (_node->node.info == &_node->info[0])

Referenced by _load_required_plugins(), and dispose_plugin_list().

## ◆ LOG_MODULE

#define LOG_MODULE "load_plugins"

## ◆ LOG_VERBOSE

#define LOG_VERBOSE

## ◆ MAX_DUPL_CFG_ENTRIES

#define MAX_DUPL_CFG_ENTRIES 256

Referenced by load_plugin_list(), save_catalog(), and save_plugin_list().

## ◆ SAVE_PLUGIN_BUF_SIZE

#define SAVE_PLUGIN_BUF_SIZE 4096

Referenced by save_plugin_list().

## ◆ XINE_ENABLE_EXPERIMENTAL_FEATURES

#define XINE_ENABLE_EXPERIMENTAL_FEATURES 1

## ◆ XSP_BUFSIZE

#define XSP_BUFSIZE 4096

Referenced by _x_scan_plugins().

## Typedef Documentation

## ◆ fat_node_t

typedef struct fat_node_st fat_node_t

## Enumeration Type Documentation

## ◆ _k_t

enum _k_t

Enumerator
_K_NONE |
_K_cache_catalog_version |
_K_flush |
_K_filename |
_K_size |
_K_mtime |
_K_type |
_K_api |
_K_id |
_K_version |
_K_visual_type |
_K_supported_types |
_K_vo_priority |
_K_ao_priority |
_K_decoder_priority |
_K_demuxer_priority |
_K_input_priority |
_K_post_type |
_K_config_key |
_K_module_priority |
_K_module_sub_type |
_K_module_type |
_K_LAST |

## Function Documentation

## ◆ _build_list_typed_plugins()

static const char *const * _build_list_typed_plugins | ( | xine_t * | xine,
|  | int | type,
|  | uint64_t | mask )
| static

References plugin_info_t::id, plugin_catalog_s::ids, fat_node_st::info, plugin_node_s::info, plugin_catalog_s::lock, fat_node_st::node, NULL, xine_s::plugin_catalog, plugin_catalog_s::plugin_lists, PLUGIN_VIDEO_OUT, plugin_info_t::special_info, type, fat_node_st::xine, xine_sarray_add(), xine_sarray_delete(), xine_sarray_get(), XINE_SARRAY_MODE_UNIQUE, xine_sarray_new(), xine_sarray_set_mode(), and xine_sarray_size().

Referenced by xine_list_audio_decoder_plugins(), xine_list_audio_output_plugins(), xine_list_demuxer_plugins(), xine_list_input_plugins(), xine_list_post_plugins(), xine_list_spu_plugins(), xine_list_video_decoder_plugins(), xine_list_video_output_plugins(), and xine_list_video_output_plugins_typed().

## ◆ _cfg_entry_cmp()

static int _cfg_entry_cmp | ( | void * | a,
|  | void * | b )
| static

Referenced by save_catalog().

## ◆ _cfg_entry_hash()

static unsigned int _cfg_entry_hash | ( | void * | a | ) |
| static

Referenced by save_catalog().

## ◆ _decoder_priority_cb()

static void _decoder_priority_cb | ( | void * | data,
|  | xine_cfg_entry_t * | cfg )
| static

References plugin_node_s::info, map_decoder_list(), fat_node_st::node, xine_cfg_entry_s::num_value, PLUGIN_AUDIO_DECODER, PLUGIN_TYPE_MASK, PLUGIN_VIDEO_DECODER, plugin_node_s::priority, plugin_info_t::type, type, xine_sarray_add(), and xine_sarray_remove_ptr().

Referenced by _insert_node(), and _x_dispose_plugins().

## ◆ _dispose_plugin_class()

static void _dispose_plugin_class | ( | plugin_node_t * | node | ) |
| static

References _x_assert, dec_file_ref(), plugin_node_s::file, plugin_node_s::info, NULL, PLUGIN_AUDIO_DECODER, PLUGIN_AUDIO_OUT, plugin_node_s::plugin_class, PLUGIN_DEMUX, PLUGIN_INPUT, PLUGIN_POST, PLUGIN_SPU_DECODER, PLUGIN_TYPE_MASK, PLUGIN_VIDEO_DECODER, PLUGIN_VIDEO_OUT, PLUGIN_XINE_MODULE, and plugin_info_t::type.

Referenced by _load_required_plugins(), _unload_unref_plugin(), and dispose_plugin_list().

## ◆ _fat_node_file_cmp()

static int _fat_node_file_cmp | ( | void * | a_gen,
|  | void * | b_gen )
| static

References fat_node_st::file, plugin_file_t::filemtime, plugin_file_t::filename, plugin_file_t::filesize, and xine_fast_string_cmp().

Referenced by _new_catalog().

## ◆ _fat_node_init()

static void _fat_node_init | ( | fat_node_t * | node | ) |
| static

References plugin_info_t::API, plugin_node_s::config_entry_list, plugin_node_s::file, plugin_file_t::filemtime, plugin_file_t::filename, plugin_file_t::filesize, plugin_info_t::id, plugin_node_s::info, plugin_info_t::init, plugin_file_t::lib_handle, plugin_file_t::no_unload, fat_node_st::node, NULL, plugin_node_s::plugin_class, plugin_node_s::priority, plugin_file_t::ref, plugin_node_s::ref, plugin_info_t::special_info, plugin_info_t::type, and plugin_info_t::version.

Referenced by _insert_node(), and load_plugin_list().

## ◆ _get_demux_strings()

static char * _get_demux_strings | ( | xine_t * | self,
|  | int | kind )
| static

References _load_plugin_class(), demux_class_s::extensions, plugin_catalog_s::lock, demux_class_s::mimetypes, NULL, xine_s::plugin_catalog, plugin_node_s::plugin_class, PLUGIN_DEMUX, plugin_catalog_s::plugin_lists, xine_find_byte(), xine_sarray_get(), xine_sarray_size(), and xine_small_memcpy.

Referenced by xine_get_file_extensions(), and xine_get_mime_types().

## ◆ _get_input_class()

static input_class_t * _get_input_class | ( | xine_t * | this,
|  | const char * | plugin_id )
| static

References _load_plugin_class(), plugin_info_t::id, plugin_node_s::info, NULL, plugin_node_s::plugin_class, PLUGIN_INPUT, plugin_catalog_s::plugin_lists, xine_sarray_get(), and xine_sarray_size().

Referenced by xine_get_autoplay_mrls(), and xine_get_browse_mrls().

## ◆ _insert_file()

static plugin_file_t * _insert_file | ( | xine_list_t * | list,
|  | const char * | filename,
|  | const struct stat * | statbuffer,
|  | void * | lib,
|  | uint32_t | name_len )
| static

References plugin_file_t::filemtime, plugin_file_t::filename, plugin_file_t::filesize, plugin_file_t::lib_handle, plugin_file_t::no_unload, NULL, plugin_file_t::ref, xine_list_push_back(), and xine_small_memcpy.

Referenced by collect_plugins().

## ◆ _insert_node()

static int _insert_node | ( | xine_t * | this,
|  | plugin_file_t * | file,
|  | fat_node_t * | node_cache,
|  | const plugin_info_t * | info,
|  | uint32_t | flags )
| static

References _, _decoder_priority_cb(), _fat_node_init(), fat_node_st::ainfo, all_info_t::ao_info, plugin_info_t::API, all_info_t::decoder_info, DECODER_MAX, xine_private_t::decoder_pri_help, all_info_t::demuxer_info, fat_node_st::file, plugin_node_s::file, plugin_file_t::filename, fat_node_st::flags, plugin_info_t::id, fat_node_st::info, plugin_node_s::info, plugin_info_t::init, all_info_t::input_info, key, fat_node_st::lastplugin, lprintf, all_info_t::module_info, plugin_file_t::no_unload, fat_node_st::node, NULL, PLUGIN_AUDIO_DECODER, PLUGIN_AUDIO_OUT, PLUGIN_DEMUX, plugin_iface_versions, PLUGIN_INPUT, PLUGIN_MAX, PLUGIN_NO_UNLOAD, PLUGIN_POST, PLUGIN_SPU_DECODER, PLUGIN_TYPE_MASK, PLUGIN_TYPE_MAX, PLUGIN_VIDEO_DECODER, PLUGIN_VIDEO_OUT, PLUGIN_XINE_MODULE, all_info_t::post_info, ao_info_t::priority, decoder_info_t::priority, demuxer_info_t::priority, input_info_t::priority, plugin_node_s::priority, vo_info_t::priority, xine_module_info_t::priority, plugin_info_t::special_info, xine_private_t::strings, decoder_info_t::supported_types, fat_node_st::supported_types, plugin_info_t::type, post_info_t::type, vo_info_t::visual_type, all_info_t::vo_info, fat_node_st::xine, xine_find_byte(), xine_log(), XINE_LOG_PLUGIN, xine_sarray_add(), xine_small_memcpy, XINE_VERBOSITY_LOG, and xprintf.

Referenced by _register_plugins_internal().

## ◆ _key_2_index()

static _k_t _key_2_index | ( | const char * | key,
|  | size_t | klen )
| static

References _K_ao_priority, _K_api, _K_cache_catalog_version, _K_config_key, _K_decoder_priority, _K_demuxer_priority, _K_flush, _K_id, _K_input_priority, _K_module_priority, _K_module_sub_type, _K_module_type, _K_mtime, _K_NONE, _K_post_type, _K_size, _K_supported_types, _K_type, _K_version, _K_visual_type, _K_vo_priority, and key.

Referenced by load_plugin_list().

## ◆ _load_audio_driver()

static ao_driver_t * _load_audio_driver | ( | xine_t * | this,
|  | plugin_node_t * | node,
|  | const void * | data )
| static

References _load_plugin_class(), inc_node_ref(), NULL, and plugin_node_s::plugin_class.

Referenced by _x_load_audio_output_plugin(), and xine_open_audio_driver().

## ◆ _load_plugin_class()

static int _load_plugin_class | ( | xine_t * | this,
|  | plugin_node_t * | node,
|  | const void * | data )
| static

References _, _new_entry_cb(), _plugin_info_equal(), plugin_node_s::file, plugin_file_t::filename, plugin_info_t::id, inc_file_ref(), plugin_node_s::info, plugin_info_t::init, plugin_file_t::lib_handle, lprintf, new_entry_data_t::node, NULL, plugin_node_s::plugin_class, PLUGIN_NONE, config_values_s::set_new_entry_callback, plugin_info_t::type, config_values_s::unset_new_entry_callback, new_entry_data_t::v, xine_log(), and XINE_LOG_PLUGIN.

Referenced by _get_demux_strings(), _get_input_class(), _load_audio_driver(), _load_required_plugins(), _load_video_driver(), _x_find_demux_plugin(), _x_find_demux_plugin_by_name(), _x_find_demux_plugin_last_probe(), _x_find_input_plugin(), _x_find_module(), _x_get_audio_decoder(), _x_get_spu_decoder(), _x_get_video_decoder(), xine_get_autoplay_input_plugin_ids(), xine_get_browsable_input_plugin_ids(), xine_get_demux_for_mime_type(), and xine_post_init().

## ◆ _load_required_plugins()

static void _load_required_plugins | ( | xine_t * | this,
|  | xine_sarray_t * | list )
| static

References _dispose_plugin_class(), _load_plugin_class(), FAT_NODE_FLAG_PROBE_CLASS, plugin_node_s::file, plugin_file_t::filename, fat_node_st::flags, plugin_info_t::id, plugin_node_s::info, IS_FAT_NODE, plugin_file_t::lib_handle, lprintf, fat_node_st::node, NULL, plugin_node_s::plugin_class, PLUGIN_MUST_PRELOAD, plugin_info_t::type, xine_sarray_get(), xine_sarray_remove(), and xine_sarray_size().

Referenced by load_required_plugins().

## ◆ _load_video_driver()

static vo_driver_t * _load_video_driver | ( | xine_t * | this,
|  | plugin_node_t * | node,
|  | const void * | data )
| static

References _load_plugin_class(), inc_node_ref(), NULL, and plugin_node_s::plugin_class.

Referenced by _x_load_video_output_plugin(), and xine_new_framegrab_video_port().

## ◆ _mime_find()

static int _mime_find | ( | uint8_t * | buf,
|  | const char * | haystack )
| static

References tab_mime, and tab_tolower.

Referenced by _x_find_demux_plugin(), and xine_get_demux_for_mime_type().

## ◆ _mime_set()

static void _mime_set | ( | uint8_t * | buf,
|  | size_t | bsize,
|  | const char * | needle )
| static

References tab_mime, and tab_tolower.

Referenced by _x_find_demux_plugin(), and xine_get_demux_for_mime_type().

## ◆ _new_catalog()

static plugin_catalog_t * _new_catalog | ( | void |  | ) |
| static

References _fat_node_file_cmp(), _plugin_node_comparator(), _post_plugin_node_comparator(), plugin_catalog_s::cache_list, plugin_catalog_s::file_list, plugin_catalog_s::lock, plugin_catalog_s::modules_list, NULL, plugin_catalog_s::plugin_lists, PLUGIN_POST, PLUGIN_TYPE_MAX, xine_list_delete(), xine_list_new(), xine_sarray_delete(), XINE_SARRAY_MODE_UNIQUE, xine_sarray_new(), and xine_sarray_set_mode().

Referenced by _x_scan_plugins().

## ◆ _new_entry_cb()

static void _new_entry_cb | ( | void * | user_data,
|  | xine_cfg_entry_t * | entry )
| static

References new_entry_data_t::cfg_entry, plugin_node_s::config_entry_list, config_values_s::cur, xine_cfg_entry_s::key, new_entry_data_t::node, user_data(), new_entry_data_t::v, xine_list_find(), xine_list_new(), and xine_list_push_back().

Referenced by _load_plugin_class(), and load_plugin_list().

## ◆ _plugin_info_equal()

static int _plugin_info_equal | ( | const plugin_info_t * | a,
|  | const plugin_info_t * | b )
| inlinestatic

References plugin_info_t::API, plugin_info_t::id, PLUGIN_TYPE_MASK, PLUGIN_VIDEO_OUT, PLUGIN_XINE_MODULE, plugin_info_t::special_info, plugin_info_t::type, and plugin_info_t::version.

Referenced by _load_plugin_class().

## ◆ _plugin_node_comparator()

static int _plugin_node_comparator | ( | void * | a,
|  | void * | b )
| static

References plugin_node_s::priority.

Referenced by _new_catalog().

## ◆ _post_plugin_node_comparator()

static int _post_plugin_node_comparator | ( | void * | a,
|  | void * | b )
| static

References plugin_info_t::id, plugin_node_s::info, and plugin_node_s::priority.

Referenced by _new_catalog().

## ◆ _register_plugins_internal()

static void _register_plugins_internal | ( | xine_t * | this,
|  | plugin_file_t * | file,
|  | fat_node_t * | node_cache,
|  | const plugin_info_t * | info,
|  | uint32_t | flags )
| static

References _, _insert_node(), fat_node_st::file, plugin_file_t::filename, fat_node_st::flags, plugin_info_t::id, fat_node_st::info, plugin_node_s::info, plugin_file_t::lib_handle, lprintf, fat_node_st::nextplugin, fat_node_st::node, NULL, PLUGIN_NONE, PLUGIN_TYPE_MASK, plugin_info_t::type, xine_builtin_plugin_info, xine_log(), and XINE_LOG_PLUGIN.

Referenced by _x_scan_plugins(), collect_plugins(), and xine_register_plugins().

## ◆ _unload_unref_plugin()

static void _unload_unref_plugin | ( | xine_t * | xine,
|  | plugin_node_t * | node )
| static

References _, _dispose_plugin_class(), plugin_node_s::file, plugin_file_t::filename, plugin_file_t::lib_handle, lprintf, plugin_file_t::no_unload, NULL, plugin_file_t::ref, plugin_node_s::ref, xine_log(), and XINE_LOG_PLUGIN.

Referenced by _unload_unref_plugins().

## ◆ _unload_unref_plugins()

static void _unload_unref_plugins | ( | xine_t * | xine,
|  | xine_sarray_t * | list )
| static

References _unload_unref_plugin(), xine_sarray_get(), and xine_sarray_size().

Referenced by xine_plugins_garbage_collector().

## ◆ _x_decoder_available()

int _x_decoder_available | ( | xine_t * | xine,
|  | uint32_t | buftype )

References _x_assert, plugin_catalog_s::audio_decoder_map, BUF_AUDIO_BASE, BUF_SPU_BASE, BUF_VIDEO_BASE, DECODER_MAX, xine_s::plugin_catalog, plugin_catalog_s::spu_decoder_map, and plugin_catalog_s::video_decoder_map.

Referenced by _probe().

## ◆ _x_find_demux_plugin()

demux_plugin_t * _x_find_demux_plugin | ( | xine_stream_t * | stream,
|  | input_plugin_t * | input )

References _, _load_plugin_class(), _mime_find(), _mime_set(), _x_demux_check_extension(), xine_stream_s::content_detection_method, xine_stream_private_st::demux, xine_s::demux_strategy, plugin_info_t::id, inc_node_ref(), plugin_node_s::info, input(), xine_stream_private_st::input_caps, INPUT_OPTIONAL_DATA_DEMUX_MIME_TYPE, INPUT_OPTIONAL_DATA_MIME_TYPE, INPUT_OPTIONAL_UNSUPPORTED, xine_stream_s::input_plugin, plugin_catalog_s::lock, METHOD_BY_CONTENT, METHOD_BY_MRL, METHOD_EXPLICIT, NULL, xine_s::plugin_catalog, plugin_node_s::plugin_class, PLUGIN_DEMUX, plugin_catalog_s::plugin_lists, xine_stream_s::xine, XINE_DEMUX_CONTENT_STRATEGY, XINE_DEMUX_DEFAULT_STRATEGY, XINE_DEMUX_EXTENSION_STRATEGY, XINE_DEMUX_REVERT_STRATEGY, xine_sarray_get(), xine_sarray_size(), XINE_VERBOSITY_DEBUG, XINE_VERBOSITY_LOG, and xprintf.

Referenced by open_internal().

## ◆ _x_find_demux_plugin_by_name()

demux_plugin_t * _x_find_demux_plugin_by_name | ( | xine_stream_t * | stream,
|  | const char * | name,
|  | input_plugin_t * | input )

References _load_plugin_class(), _x_demux_check_extension(), xine_stream_s::content_detection_method, plugin_info_t::id, inc_node_ref(), plugin_node_s::info, input(), plugin_catalog_s::lock, METHOD_BY_MRL, METHOD_EXPLICIT, name, NULL, xine_s::plugin_catalog, plugin_node_s::plugin_class, PLUGIN_DEMUX, plugin_catalog_s::plugin_lists, xine_stream_s::xine, xine_sarray_get(), and xine_sarray_size().

Referenced by open_internal().

## ◆ _x_find_demux_plugin_last_probe()

demux_plugin_t * _x_find_demux_plugin_last_probe | ( | xine_stream_t * | stream,
|  | const char * | last_demux_name,
|  | input_plugin_t * | input )

References _, _load_plugin_class(), _x_demux_check_extension(), xine_stream_s::content_detection_method, plugin_info_t::id, inc_node_ref(), plugin_node_s::info, input(), plugin_catalog_s::lock, lprintf, METHOD_BY_CONTENT, METHOD_BY_MRL, NULL, xine_s::plugin_catalog, plugin_node_s::plugin_class, PLUGIN_DEMUX, plugin_catalog_s::plugin_lists, xine_stream_s::xine, xine_sarray_get(), xine_sarray_size(), XINE_VERBOSITY_DEBUG, XINE_VERBOSITY_LOG, and xprintf.

Referenced by open_internal().

## ◆ _x_find_input_plugin()

input_plugin_t * _x_find_input_plugin | ( | xine_stream_t * | stream,
|  | const char * | mrl )

References _load_plugin_class(), inc_node_ref(), input_plugin_s::input_class, xine_stream_s::input_plugin, plugin_catalog_s::lock, NULL, xine_s::plugin_catalog, plugin_node_s::plugin_class, PLUGIN_INPUT, plugin_catalog_s::plugin_lists, xine_stream_private_st::query_input_plugins, xine_stream_private_st::s, xine_stream_s::xine, xine_sarray_get(), and xine_sarray_size().

Referenced by crypto_class_get_instance(), hls_input_get_instance(), hls_input_switch_mrl(), mpd_input_get_instance(), mpd_input_switch_mrl(), and open_internal().

## ◆ _x_find_module()

xine_module_t * _x_find_module | ( | xine_t * | xine,
|  | const char * | type,
|  | const char * | id,
|  | unsigned | sub_type,
|  | const void * | params )

References _load_plugin_class(), plugin_info_t::id, inc_node_ref(), plugin_node_s::info, plugin_catalog_s::lock, plugin_catalog_s::modules_list, xine_module_s::node, NULL, xine_s::plugin_catalog, plugin_node_s::plugin_class, plugin_info_t::special_info, xine_module_info_t::sub_type, type, xine_module_info_t::type, xine_sarray_get(), and xine_sarray_size().

Referenced by _x_find_tls_plugin(), _x_hwdec_new(), _x_load_gl(), and _x_va_display_open().

## ◆ _x_free_audio_decoder()

void _x_free_audio_decoder | ( | xine_stream_t * | stream,
|  | audio_decoder_t * | ad )

References dec_node_ref(), audio_decoder_s::dispose, plugin_catalog_s::lock, xine_s::plugin_catalog, and xine_stream_s::xine.

Referenced by audio_decoder_loop().

## ◆ _x_free_audio_driver()

void _x_free_audio_driver | ( | xine_t * | xine,
|  | ao_driver_t ** | pdriver )

References dec_node_ref(), ao_driver_s::exit, plugin_catalog_s::lock, NULL, and xine_s::plugin_catalog.

Referenced by ao_exit(), and ao_loop().

## ◆ _x_free_demux_plugin()

void _x_free_demux_plugin | ( | xine_stream_t * | stream,
|  | demux_plugin_t ** | pdemux )

References dec_node_ref(), demux_plugin_s::dispose, plugin_catalog_s::lock, NULL, xine_s::plugin_catalog, and xine_stream_s::xine.

Referenced by close_internal(), and open_internal().

## ◆ _x_free_input_plugin()

void _x_free_input_plugin | ( | xine_stream_t * | stream,
|  | input_plugin_t * | input )

References dec_node_ref(), input(), plugin_catalog_s::lock, xine_s::plugin_catalog, and xine_stream_s::xine.

Referenced by cache_plugin_dispose(), close_internal(), crypto_class_get_instance(), crypto_plugin_dispose(), hls_input_dispose(), hls_input_get_instance(), hls_input_switch_mrl(), mpd_input_dispose(), mpd_input_get_instance(), mpd_input_switch_mrl(), open_internal(), rip_plugin_dispose(), and xine_open().

## ◆ _x_free_module()

void _x_free_module | ( | xine_t * | xine,
|  | xine_module_t ** | pmodule )

References dec_node_ref(), plugin_catalog_s::lock, NULL, and xine_s::plugin_catalog.

Referenced by _x_free_tls_plugin(), default_gl_dispose(), default_hwdec_destroy(), and default_va_display_dispose().

## ◆ _x_free_spu_decoder()

void _x_free_spu_decoder | ( | xine_stream_t * | stream,
|  | spu_decoder_t * | sd )

References dec_node_ref(), spu_decoder_s::dispose, plugin_catalog_s::lock, xine_s::plugin_catalog, and xine_stream_s::xine.

Referenced by update_spu_decoder(), and video_decoder_loop().

## ◆ _x_free_video_decoder()

void _x_free_video_decoder | ( | xine_stream_t * | stream,
|  | video_decoder_t * | vd )

References dec_node_ref(), video_decoder_s::dispose, plugin_catalog_s::lock, xine_s::plugin_catalog, and xine_stream_s::xine.

Referenced by video_decoder_loop().

## ◆ _x_free_video_driver()

void _x_free_video_driver | ( | xine_t * | xine,
|  | vo_driver_t ** | pdriver )

References dec_node_ref(), plugin_catalog_s::lock, NULL, and xine_s::plugin_catalog.

Referenced by vo_exit().

## ◆ _x_get_audio_decoder()

audio_decoder_t * _x_get_audio_decoder | ( | xine_stream_t * | stream,
|  | uint8_t | stream_type )

References _load_plugin_class(), _x_assert, plugin_catalog_s::audio_decoder_map, DECODER_MAX, plugin_info_t::id, inc_node_ref(), plugin_node_s::info, plugin_catalog_s::lock, lprintf, NULL, xine_s::plugin_catalog, plugin_node_s::plugin_class, PLUGINS_PER_TYPE, xine_stream_s::xine, XINE_VERBOSITY_DEBUG, and xprintf.

Referenced by audio_decoder_loop().

## ◆ _x_get_spu_decoder()

spu_decoder_t * _x_get_spu_decoder | ( | xine_stream_t * | stream,
|  | uint8_t | stream_type )

References _load_plugin_class(), _x_assert, DECODER_MAX, plugin_info_t::id, inc_node_ref(), plugin_node_s::info, plugin_catalog_s::lock, lprintf, NULL, xine_s::plugin_catalog, plugin_node_s::plugin_class, PLUGINS_PER_TYPE, plugin_catalog_s::spu_decoder_map, xine_stream_s::xine, XINE_VERBOSITY_DEBUG, and xprintf.

Referenced by process_userdata(), and update_spu_decoder().

## ◆ _x_get_video_decoder()

video_decoder_t * _x_get_video_decoder | ( | xine_stream_t * | stream,
|  | uint8_t | stream_type )

References _load_plugin_class(), _x_assert, DECODER_MAX, plugin_info_t::id, inc_node_ref(), plugin_node_s::info, plugin_catalog_s::lock, lprintf, NULL, xine_s::plugin_catalog, plugin_node_s::plugin_class, PLUGINS_PER_TYPE, plugin_catalog_s::video_decoder_map, xine_stream_s::xine, XINE_VERBOSITY_DEBUG, and xprintf.

Referenced by video_decoder_loop().

## ◆ _x_load_audio_output_plugin()

ao_driver_t * _x_load_audio_output_plugin | ( | xine_t * | this,
|  | const char * | id )

References _, _load_audio_driver(), plugin_info_t::id, plugin_node_s::info, plugin_catalog_s::lock, NULL, PLUGIN_AUDIO_OUT, xine_sarray_get(), xine_sarray_size(), XINE_VERBOSITY_LOG, and xprintf.

Referenced by ao_loop().

## ◆ _x_load_video_output_plugin()

vo_driver_t * _x_load_video_output_plugin | ( | xine_t * | this,
|  | const char * | id,
|  | int | visual_type,
|  | const void * | visual )

References _load_video_driver(), plugin_info_t::id, plugin_node_s::info, plugin_catalog_s::lock, NULL, plugin_catalog_s::plugin_lists, PLUGIN_VIDEO_OUT, plugin_info_t::special_info, vo_info_t::visual_type, xine_sarray_get(), and xine_sarray_size().

Referenced by xine_open_video_driver().

## ◆ catalog_filename()

static size_t catalog_filename | ( | xine_t * | this,
|  | char * | buf,
|  | size_t | bsize,
|  | int | createdir )
| static

Returns the complete filename for the plugins' cache file.

Parameters

  this | xine instance pointer, used for logging and libxdg-basedir.
  buf | write filename here.
  bsize | write at most this many bytes.
  createdir | If not zero, create the directory structure in which the file has to reside.

Returns
  the strlen () of filename, or 0 (eg if a directory could not be created).

See also
  XDG Base Directory specification: http://standards.freedesktop.org/basedir-spec/latest/index.html

References _, PACKAGE, xine_find_byte(), XINE_VERBOSITY_LOG, and xprintf.

Referenced by load_cached_catalog(), and save_catalog().

## ◆ collect_plugins()

static void collect_plugins | ( | xine_t * | this,
|  | char * | path,
|  | char * | stop,
|  | char * | pend )
| static

References _, _insert_file(), _register_plugins_internal(), FAT_NODE_FLAG_PROBE_CLASS, fat_node_st::file, plugin_file_t::filemtime, plugin_file_t::filename, plugin_file_t::filesize, plugin_node_s::info, lprintf, fat_node_st::node, NULL, xine_fast_string_set(), xine_log(), XINE_LOG_PLUGIN, xine_sarray_binary_search(), xine_sarray_get(), xine_sarray_remove(), XINE_VERBOSITY_LOG, and xprintf.

Referenced by _x_scan_plugins().

## ◆ dec_file_ref()

static void dec_file_ref | ( | plugin_file_t * | file | ) |
| static

References _x_assert, fat_node_st::file, plugin_file_t::filename, lprintf, and plugin_file_t::ref.

Referenced by _dispose_plugin_class().

## ◆ dec_node_ref()

static void dec_node_ref | ( | plugin_node_t * | node | ) |
| static

References _x_assert, plugin_info_t::id, plugin_node_s::info, lprintf, fat_node_st::node, and plugin_node_s::ref.

Referenced by _x_free_audio_decoder(), _x_free_audio_driver(), _x_free_demux_plugin(), _x_free_input_plugin(), _x_free_module(), _x_free_spu_decoder(), _x_free_video_decoder(), and _x_free_video_driver().

## ◆ dispose_plugin_file_list()

static void dispose_plugin_file_list | ( | xine_list_t * | list | ) |
| static

References _x_freep(), plugin_file_t::filename, NULL, xine_list_delete(), and xine_list_next_value().

Referenced by _x_dispose_plugins().

## ◆ dispose_plugin_list()

static int dispose_plugin_list | ( | xine_sarray_t * | list,
|  | int | is_cache )
| static

References _dispose_plugin_class(), _x_assert, _x_freep(), fat_node_st::ainfo, plugin_node_s::config_entry_list, fat_node_st::file, plugin_node_s::file, plugin_file_t::filename, plugin_info_t::id, fat_node_st::info, plugin_node_s::info, IS_FAT_NODE, plugin_file_t::lib_handle, lprintf, fat_node_st::nextplugin, fat_node_st::node, NULL, PLUGIN_AUDIO_DECODER, PLUGIN_SPU_DECODER, PLUGIN_TYPE_MASK, PLUGIN_VIDEO_DECODER, plugin_file_t::ref, plugin_node_s::ref, plugin_info_t::special_info, decoder_info_t::supported_types, fat_node_st::supported_types, plugin_info_t::type, xine_list_delete(), xine_sarray_delete(), xine_sarray_get(), and xine_sarray_size().

Referenced by _x_dispose_plugins().

## ◆ inc_file_ref()

static void inc_file_ref | ( | plugin_file_t * | file | ) |
| static

References fat_node_st::file, and plugin_file_t::ref.

Referenced by _load_plugin_class().

## ◆ inc_node_ref()

static void inc_node_ref | ( | plugin_node_t * | node | ) |
| static

References fat_node_st::node, and plugin_node_s::ref.

Referenced by _load_audio_driver(), _load_video_driver(), _x_find_demux_plugin(), _x_find_demux_plugin_by_name(), _x_find_demux_plugin_last_probe(), _x_find_input_plugin(), _x_find_module(), _x_get_audio_decoder(), _x_get_spu_decoder(), _x_get_video_decoder(), and xine_post_init().

## ◆ load_cached_catalog()

static void load_cached_catalog | ( | xine_t * | this | ) |
| static

References catalog_filename(), and load_plugin_list().

Referenced by _x_scan_plugins().

## ◆ load_plugin_list()

static void load_plugin_list | ( | xine_t * | this,
|  | const char * | filename,
|  | xine_sarray_t * | plugins )
| static

<< node.file.filename is not a xine_fast_string_t, never passed there.

References _fat_node_init(), _K_ao_priority, _K_api, _K_cache_catalog_version, _K_config_key, _K_decoder_priority, _K_demuxer_priority, _K_filename, _K_flush, _K_id, _K_input_priority, _K_module_priority, _K_module_sub_type, _K_module_type, _K_mtime, _K_post_type, _K_size, _K_supported_types, _K_type, _K_version, _K_visual_type, _K_vo_priority, _key_2_index(), _new_entry_cb(), fat_node_st::ainfo, all_info_t::ao_info, plugin_info_t::API, CACHE_CATALOG_VERSION, new_entry_data_t::cfg_entry, plugin_node_s::config_entry_list, all_info_t::decoder_info, all_info_t::demuxer_info, fat_node_st::file, plugin_node_s::file, plugin_file_t::filemtime, plugin_file_t::filename, plugin_file_t::filesize, plugin_info_t::id, fat_node_st::info, plugin_node_s::info, all_info_t::input_info, fat_node_st::lastplugin, lprintf, MAX_DUPL_CFG_ENTRIES, all_info_t::module_info, fat_node_st::nextplugin, fat_node_st::node, new_entry_data_t::node, NULL, all_info_t::post_info, ao_info_t::priority, decoder_info_t::priority, demuxer_info_t::priority, input_info_t::priority, vo_info_t::priority, xine_module_info_t::priority, plugin_info_t::special_info, xine_module_info_t::sub_type, decoder_info_t::supported_types, fat_node_st::supported_types, supported_types, plugin_info_t::type, post_info_t::type, xine_module_info_t::type, new_entry_data_t::v, v, plugin_info_t::version, vo_info_t::visual_type, all_info_t::vo_info, xine_fast_string_init(), xine_fast_string_set(), xine_fast_text_line(), xine_fast_text_load(), xine_fast_text_unload(), xine_find_byte(), xine_list_find(), xine_list_new(), xine_list_push_back(), xine_sarray_add(), xine_sarray_get(), xine_small_memcpy, xine_str2int32(), xine_str2uint32(), and xine_str2uint64().

Referenced by load_cached_catalog().

## ◆ load_required_plugins()

static void load_required_plugins | ( | xine_t * | this | ) |
| static

References _load_required_plugins(), and PLUGIN_TYPE_MAX.

Referenced by _x_scan_plugins().

## ◆ map_decoder_list()

static void map_decoder_list | ( | xine_t * | this,
|  | xine_sarray_t * | decoder_list,
|  | plugin_node_t * | decoder_map[DECODER_MAX][PLUGINS_PER_TYPE] )
| static

References _, DECODER_MAX, plugin_info_t::id, plugin_node_s::info, lprintf, fat_node_st::node, NULL, PLUGINS_PER_TYPE, plugin_node_s::priority, plugin_info_t::special_info, type, xine_log(), XINE_LOG_PLUGIN, xine_sarray_get(), and xine_sarray_size().

Referenced by _decoder_priority_cb(), and map_decoders().

## ◆ map_decoders()

static void map_decoders | ( | xine_t * | this | ) |
| static

References plugin_catalog_s::audio_decoder_map, lprintf, map_decoder_list(), PLUGIN_AUDIO_DECODER, plugin_catalog_s::plugin_lists, PLUGIN_SPU_DECODER, PLUGIN_VIDEO_DECODER, plugin_catalog_s::spu_decoder_map, and plugin_catalog_s::video_decoder_map.

Referenced by _x_scan_plugins().

## ◆ save_catalog()

static void save_catalog | ( | xine_t * | this | ) |
| static

References _, _cfg_entry_cmp(), _cfg_entry_hash(), CACHE_CATALOG_VERSION_STR, catalog_filename(), _load_plugins_dupl_cfg_t::have, _load_plugins_dupl_cfg_t::list, MAX_DUPL_CFG_ENTRIES, NULL, PLUGIN_TYPE_MAX, save_plugin_list(), xine_log(), XINE_LOG_MSG, xine_sarray_delete(), XINE_SARRAY_MODE_UNIQUE, xine_sarray_new(), xine_sarray_set_hash(), and xine_sarray_set_mode().

Referenced by _x_scan_plugins().

## ◆ save_plugin_list()

static void save_plugin_list | ( | xine_t * | this,
|  | FILE * | fp,
|  | xine_sarray_t * | list,
|  | _load_plugins_dupl_cfg_t * | cfg )
| static

References plugin_info_t::API, plugin_node_s::config_entry_list, _load_plugins_dupl_cfg_t::entries, plugin_node_s::file, plugin_file_t::filemtime, plugin_file_t::filename, plugin_file_t::filesize, _load_plugins_dupl_cfg_t::have, plugin_info_t::id, plugin_node_s::info, cfg_entry_s::key, _load_plugins_dupl_cfg_t::list, lprintf, MAX_DUPL_CFG_ENTRIES, module_info, NULL, PLUGIN_AUDIO_DECODER, PLUGIN_AUDIO_OUT, PLUGIN_DEMUX, PLUGIN_INPUT, PLUGIN_POST, PLUGIN_SPU_DECODER, PLUGIN_TYPE_MASK, PLUGIN_VIDEO_DECODER, PLUGIN_VIDEO_OUT, PLUGIN_XINE_MODULE, ao_info_t::priority, decoder_info_t::priority, demuxer_info_t::priority, input_info_t::priority, vo_info_t::priority, xine_module_info_t::priority, SAVE_PLUGIN_BUF_SIZE, plugin_info_t::special_info, xine_module_info_t::sub_type, decoder_info_t::supported_types, plugin_info_t::type, post_info_t::type, xine_module_info_t::type, plugin_info_t::version, vo_info_t::visual_type, xine_find_byte(), xine_int32_2str(), xine_list_next_value(), XINE_MAX_INT32_STR, XINE_MAX_INT64_STR, xine_sarray_add(), xine_sarray_get(), xine_sarray_size(), xine_uint2str, and xine_uint32_2str().

Referenced by save_catalog().

## ◆ xine_close_audio_driver()

void xine_close_audio_driver | ( | xine_t * | this,
|  | xine_audio_port_t * | ao_port )

References xine_audio_port_s::exit.

## ◆ xine_close_video_driver()

void xine_close_video_driver | ( | xine_t * | this,
|  | xine_video_port_t * | vo_port )

References xine_video_port_s::exit.

## ◆ xine_get_audio_driver_plugin_description()

const char * xine_get_audio_driver_plugin_description | ( | xine_t * | this,
|  | const char * | plugin_id )

## ◆ xine_get_audio_plugin_description()

const char * xine_get_audio_plugin_description | ( | xine_t * | this,
|  | const char * | plugin_id )

## ◆ xine_get_autoplay_input_plugin_ids()

const char *const * xine_get_autoplay_input_plugin_ids | ( | xine_t * | this | ) |

References _load_plugin_class(), input_class_s::get_autoplay_list, plugin_info_t::id, plugin_catalog_s::ids, plugin_node_s::info, plugin_catalog_s::lock, NULL, plugin_node_s::plugin_class, PLUGIN_INPUT, plugin_catalog_s::plugin_lists, xine_sarray_get(), and xine_sarray_size().

## ◆ xine_get_autoplay_mrls()

const char *const * xine_get_autoplay_mrls | ( | xine_t * | this,
|  | const char * | plugin_id,
|  | int * | num_mrls )

References _get_input_class(), input_class_s::get_autoplay_list, plugin_catalog_s::lock, and NULL.

## ◆ xine_get_browsable_input_plugin_ids()

const char *const * xine_get_browsable_input_plugin_ids | ( | xine_t * | this | ) |

References _load_plugin_class(), input_class_s::get_dir, plugin_info_t::id, plugin_catalog_s::ids, plugin_node_s::info, plugin_catalog_s::lock, NULL, plugin_node_s::plugin_class, PLUGIN_INPUT, plugin_catalog_s::plugin_lists, xine_sarray_get(), and xine_sarray_size().

## ◆ xine_get_browse_mrls()

xine_mrl_t ** xine_get_browse_mrls | ( | xine_t * | this,
|  | const char * | plugin_id,
|  | const char * | start_mrl,
|  | int * | num_mrls )

References _get_input_class(), input_class_s::get_dir, plugin_catalog_s::lock, and NULL.

## ◆ xine_get_demux_for_mime_type()

char * xine_get_demux_for_mime_type | ( | xine_t * | xine,
|  | const char * | mime_type )

References _load_plugin_class(), _mime_find(), _mime_set(), plugin_info_t::id, plugin_node_s::info, plugin_catalog_s::lock, NULL, xine_s::plugin_catalog, plugin_node_s::plugin_class, PLUGIN_DEMUX, plugin_catalog_s::plugin_lists, xine_sarray_get(), and xine_sarray_size().

## ◆ xine_get_demux_plugin_description()

const char * xine_get_demux_plugin_description | ( | xine_t * | this,
|  | const char * | plugin_id )

## ◆ xine_get_file_extensions()

char * xine_get_file_extensions | ( | xine_t * | self | ) |

References _get_demux_strings().

## ◆ xine_get_input_plugin_description()

const char * xine_get_input_plugin_description | ( | xine_t * | this,
|  | const char * | plugin_id )

## ◆ xine_get_mime_types()

char * xine_get_mime_types | ( | xine_t * | self | ) |

References _get_demux_strings().

## ◆ xine_get_post_plugin_description()

const char * xine_get_post_plugin_description | ( | xine_t * | this,
|  | const char * | plugin_id )

## ◆ xine_get_spu_plugin_description()

const char * xine_get_spu_plugin_description | ( | xine_t * | this,
|  | const char * | plugin_id )

## ◆ xine_get_video_driver_plugin_description()

const char * xine_get_video_driver_plugin_description | ( | xine_t * | this,
|  | const char * | plugin_id )

## ◆ xine_get_video_plugin_description()

const char * xine_get_video_plugin_description | ( | xine_t * | this,
|  | const char * | plugin_id )

## ◆ xine_list_audio_decoder_plugins()

const char *const * xine_list_audio_decoder_plugins | ( | xine_t * | xine | ) |

References _build_list_typed_plugins(), and PLUGIN_AUDIO_DECODER.

## ◆ xine_list_audio_output_plugins()

const char *const * xine_list_audio_output_plugins | ( | xine_t * | xine | ) |

References _build_list_typed_plugins(), and PLUGIN_AUDIO_OUT.

## ◆ xine_list_demuxer_plugins()

const char *const * xine_list_demuxer_plugins | ( | xine_t * | xine | ) |

References _build_list_typed_plugins(), and PLUGIN_DEMUX.

## ◆ xine_list_input_plugins()

const char *const * xine_list_input_plugins | ( | xine_t * | xine | ) |

References _build_list_typed_plugins(), and PLUGIN_INPUT.

## ◆ xine_list_post_plugins()

const char *const * xine_list_post_plugins | ( | xine_t * | xine | ) |

References _build_list_typed_plugins(), and PLUGIN_POST.

## ◆ xine_list_post_plugins_typed()

const char *const * xine_list_post_plugins_typed | ( | xine_t * | xine,
|  | uint32_t | type )

References plugin_info_t::id, plugin_catalog_s::ids, plugin_node_s::info, plugin_catalog_s::lock, NULL, xine_s::plugin_catalog, plugin_catalog_s::plugin_lists, PLUGIN_POST, plugin_info_t::special_info, type, xine_sarray_get(), and xine_sarray_size().

## ◆ xine_list_spu_plugins()

const char *const * xine_list_spu_plugins | ( | xine_t * | xine | ) |

References _build_list_typed_plugins(), and PLUGIN_SPU_DECODER.

## ◆ xine_list_video_decoder_plugins()

const char *const * xine_list_video_decoder_plugins | ( | xine_t * | xine | ) |

References _build_list_typed_plugins(), and PLUGIN_VIDEO_DECODER.

## ◆ xine_list_video_output_plugins()

const char *const * xine_list_video_output_plugins | ( | xine_t * | xine | ) |

References _build_list_typed_plugins(), and PLUGIN_VIDEO_OUT.

## ◆ xine_list_video_output_plugins_typed()

const char *const * xine_list_video_output_plugins_typed | ( | xine_t * | xine,
|  | uint64_t | typemask )

References _build_list_typed_plugins(), and PLUGIN_VIDEO_OUT.

## ◆ xine_new_framegrab_audio_port()

xine_audio_port_t * xine_new_framegrab_audio_port | ( | xine_t * | this | ) |

References _x_ao_new_port(), and NULL.

## ◆ xine_new_framegrab_video_port()

xine_video_port_t * xine_new_framegrab_video_port | ( | xine_t * | this | ) |

References _load_video_driver(), _x_vo_new_port(), plugin_info_t::id, plugin_node_s::info, plugin_catalog_s::lock, lprintf, NULL, plugin_catalog_s::plugin_lists, PLUGIN_VIDEO_OUT, xine_sarray_get(), and xine_sarray_size().

## ◆ xine_open_audio_driver()

xine_audio_port_t * xine_open_audio_driver | ( | xine_t * | this,
|  | const char * | id,
|  | const void * | data )

References _, _load_audio_driver(), _x_ao_new_port(), plugin_info_t::id, plugin_node_s::info, plugin_catalog_s::lock, NULL, PLUGIN_AUDIO_OUT, ao_info_t::priority, plugin_info_t::special_info, xine_sarray_get(), xine_sarray_size(), XINE_VERBOSITY_LOG, and xprintf.

## ◆ xine_open_video_driver()

xine_video_port_t * xine_open_video_driver | ( | xine_t * | this,
|  | const char * | id,
|  | int | visual_type,
|  | const void * | visual )

References _x_load_video_output_plugin(), _x_vo_new_port(), lprintf, and NULL.

## ◆ xine_plugins_garbage_collector()

void xine_plugins_garbage_collector | ( | xine_t * | self | ) |

References _unload_unref_plugins(), plugin_file_t::filename, plugin_catalog_s::lock, xine_s::plugin_catalog, plugin_catalog_s::plugin_lists, PLUGIN_TYPE_MAX, and plugin_file_t::ref.

## ◆ xine_post_dispose()

void xine_post_dispose | ( | xine_t * | xine,
|  | xine_post_t * | post_gen )

References post_plugin_s::dispose.

## ◆ xine_post_init()

xine_post_t * xine_post_init | ( | xine_t * | xine_gen,
|  | const char * | name,
|  | int | inputs,
|  | xine_audio_port_t ** | audio_target,
|  | xine_video_port_t ** | video_target )

References _load_plugin_class(), plugin_info_t::id, inc_node_ref(), plugin_node_s::info, input(), plugin_catalog_s::lock, name, xine_post_in_s::name, xine_post_out_s::name, NULL, xine_s::plugin_catalog, plugin_node_s::plugin_class, plugin_catalog_s::plugin_lists, PLUGIN_POST, xine_private_t::port_ticket, plugin_info_t::special_info, xine_private_t::x, xine_list_next_value(), xine_list_size(), xine_sarray_get(), xine_sarray_size(), XINE_VERBOSITY_DEBUG, and xprintf.

## ◆ xine_register_plugins()

void xine_register_plugins | ( | xine_t * | self,
|  | const plugin_info_t * | info )

References _register_plugins_internal(), fat_node_st::info, and NULL.

## Variable Documentation

## ◆ plugin_iface_versions

const uint8_t plugin_iface_versions[((PLUGIN_TYPE_MAX) >(PLUGIN_XINE_MODULE) ?(PLUGIN_TYPE_MAX) :(PLUGIN_XINE_MODULE))+1]
| static

Initial value:
= {
[PLUGIN_INPUT] = INPUT_PLUGIN_IFACE_VERSION,
[PLUGIN_DEMUX] = DEMUXER_PLUGIN_IFACE_VERSION,
[PLUGIN_AUDIO_DECODER] = AUDIO_DECODER_IFACE_VERSION,
[PLUGIN_VIDEO_DECODER] = VIDEO_DECODER_IFACE_VERSION,
[PLUGIN_SPU_DECODER] = SPU_DECODER_IFACE_VERSION,
[PLUGIN_AUDIO_OUT] = AUDIO_OUT_IFACE_VERSION,
[PLUGIN_VIDEO_OUT] = VIDEO_OUT_DRIVER_IFACE_VERSION,
[PLUGIN_POST] = POST_PLUGIN_IFACE_VERSION,
[PLUGIN_XINE_MODULE] = XINE_MODULE_IFACE_VERSION,
}
AUDIO_DECODER_IFACE_VERSION
#define AUDIO_DECODER_IFACE_VERSION
Definition audio_decoder.h:31
AUDIO_OUT_IFACE_VERSION
#define AUDIO_OUT_IFACE_VERSION
Definition audio_out.h:34
DEMUXER_PLUGIN_IFACE_VERSION
#define DEMUXER_PLUGIN_IFACE_VERSION
Definition demux.h:31
VIDEO_OUT_DRIVER_IFACE_VERSION
#define VIDEO_OUT_DRIVER_IFACE_VERSION
Definition video_out.h:369
INPUT_PLUGIN_IFACE_VERSION
#define INPUT_PLUGIN_IFACE_VERSION
Definition input_plugin.h:33
POST_PLUGIN_IFACE_VERSION
#define POST_PLUGIN_IFACE_VERSION
Definition post.h:37
SPU_DECODER_IFACE_VERSION
#define SPU_DECODER_IFACE_VERSION
Definition spu_decoder.h:33
VIDEO_DECODER_IFACE_VERSION
#define VIDEO_DECODER_IFACE_VERSION
Definition video_decoder.h:31
XINE_MODULE_IFACE_VERSION
#define XINE_MODULE_IFACE_VERSION
Definition xine_module.h:24
PLUGIN_DEMUX
#define PLUGIN_DEMUX
Definition xine_plugin.h:31
PLUGIN_AUDIO_DECODER
#define PLUGIN_AUDIO_DECODER
Definition xine_plugin.h:32
PLUGIN_SPU_DECODER
#define PLUGIN_SPU_DECODER
Definition xine_plugin.h:34
PLUGIN_AUDIO_OUT
#define PLUGIN_AUDIO_OUT
Definition xine_plugin.h:35
PLUGIN_VIDEO_OUT
#define PLUGIN_VIDEO_OUT
Definition xine_plugin.h:36
PLUGIN_INPUT
#define PLUGIN_INPUT
Definition xine_plugin.h:30
PLUGIN_VIDEO_DECODER
#define PLUGIN_VIDEO_DECODER
Definition xine_plugin.h:33
PLUGIN_POST
#define PLUGIN_POST
Definition xine_plugin.h:37
PLUGIN_XINE_MODULE
#define PLUGIN_XINE_MODULE
Definition xine_plugin.h:41

Referenced by _insert_node().

## ◆ tab_mime

const uint8_t tab_mime[256]
| static

Initial value:
= {
['\0'] = 1,
['\r'] = 2,
['\n'] = 2,
['\t'] = 2,
[' '] = 2,
[':'] = 4,
[';'] = 8
}

Referenced by _mime_find(), and _mime_set().

## ◆ tab_tolower

const uint8_t tab_tolower[256]
| static

Initial value:
= {
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
64,'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o',
'p','q','r','s','t','u','v','w','x','y','z', 91, 92, 93, 94, 95,
96,'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o',
'p','q','r','s','t','u','v','w','x','y','z',123,124,125,126,127,
128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,
160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,
176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,
192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,
208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,
224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,
240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255
}

Referenced by _mime_find(), _mime_set(), and http_plugin_handshake().