Complete rewrite of vlc_symbols.h generation (closes #155)
authorRémi Denis-Courmont <rem@videolan.org>
Thu, 2 Jun 2005 12:47:30 +0000 (12:47 +0000)
committerRémi Denis-Courmont <rem@videolan.org>
Thu, 2 Jun 2005 12:47:30 +0000 (12:47 +0000)
New VLC_EXPORTs are now added at the end of module_symbols_t so that
offsets of other function pointers are preserved.

Deleted VLC_EXPORTs are replaced with dummy pointers for padding.

Of course, it doesn't solve the problem with changing shared structures
format :/ and it may cause SVN conflicts when multiple people changes
VLC_EXPORT. I doubt it can be avoided though.

Makefile.am
include/vlc_symbols.h [new file with mode: 0644]
src/Makefile.am
src/misc/modules.c
src/misc/modules_plugin.h.in [deleted file]
toolbox
vlc-api.pl [new file with mode: 0755]
vlc-config.in.in

index 521c081..691e548 100644 (file)
@@ -23,6 +23,7 @@ EXTRA_DIST = \
        bootstrap \
        src/extras/COPYING \
        toolbox \
+       vlc-api.pl \
        vlc-config.in.in \
        vlc.spec \
        vlc.spec.mdk \
@@ -45,9 +46,7 @@ AUTOMAKE_OPTIONS = dist-bzip2 subdir-objects
 
 BUILT_SOURCES += \
        stamp-api \
-       include/vlc_symbols.h \
        src/misc/modules_builtin.h \
-       src/misc/modules_plugin.h \
        $(NULL)
 
 pkgincludedir = $(includedir)/vlc
@@ -63,7 +62,7 @@ dist_pkginclude_HEADERS = \
        include/vlc/control.h \
        $(NULL)
 
-noinst_HEADERS = $(HEADERS_include) $(HEADERS_include_built)
+noinst_HEADERS = $(HEADERS_include)
 
 HEADERS_include = \
        include/aout_internal.h \
@@ -114,6 +113,7 @@ HEADERS_include = \
        include/vlc_playlist.h \
        include/vlc_spu.h \
        include/vlc_stream.h \
+       include/vlc_symbols.h \
        include/vlc_threads_funcs.h \
        include/vlc_threads.h \
        include/vlc_video.h \
@@ -124,32 +124,12 @@ HEADERS_include = \
        include/win32_specific.h \
        $(NULL)
 
-HEADERS_include_built = \
-       include/vlc_symbols.h \
-       $(NULL)
-
-# Common dependencies for these 3 files : Makefile vlc-config
-# Real specific dependencies :
-
-#include/vlc_symbols.h: $(HEADERS_include)
-#src/misc/modules_plugin.h: src/misc/modules_plugin.h.in $(HEADERS_include)
-#src/misc/modules_builtin.h: src/misc/modules_builtin.h.in vlc-config
-
-include/vlc_symbols.h:
-       srcdir=$(srcdir) $(srcdir)/toolbox --update-includes
-
-# for some strange reasons (??) modules_plugin.h depends on vlc_symbols.h
-# so we have to touch it :(
-src/misc/modules_plugin.h: src/misc/modules_plugin.h.in
-       srcdir=$(srcdir) $(srcdir)/toolbox --update-includes
-       touch src/misc/modules_plugin.h
-
-src/misc/modules_builtin.h: src/misc/modules_builtin.h.in
+src/misc/modules_builtin.h: Makefile src/misc/modules_builtin.h.in vlc-config
        srcdir=$(srcdir) $(srcdir)/toolbox --update-includes
+       touch $@
 
 # These dependencies are mandatory
-$(SOURCES): include/vlc_symbols.h
-$(SOURCES_libvlc): src/misc/modules_plugin.h src/misc/modules_builtin.h $(LIB_intl)
+$(SOURCES_libvlc): src/misc/modules_builtin.h $(LIB_intl)
 
 ###############################################################################
 # Optional libintl - FIXME, bad dependencies
@@ -285,7 +265,6 @@ CLEANFILES = $(BUILT_SOURCES)
 lib_LIBRARIES = lib/libvlc.a $(LIBRARIES_libvlc_pic)
 
 lib_libvlc_a_SOURCES = $(SOURCES_libvlc)
-dist_lib_libvlc_a_SOURCES = src/misc/modules_plugin.h
 lib_libvlc_a_CFLAGS = `$(VLC_CONFIG) --cflags vlc`
 lib_libvlc_a_CXXFLAGS = `$(VLC_CONFIG) --cxxflags vlc`
 lib_libvlc_a_OBJCFLAGS = `$(VLC_CONFIG) --objcflags vlc`
@@ -939,8 +918,8 @@ stamp-builtin: FORCE
        done
        @if test ! -f $@; then printf "" > $@; fi
 
-stamp-api: Makefile $(HEADERS_include) vlc-config src/misc/modules_plugin.h.in src/misc/modules_builtin.h.in
-       srcdir=$(srcdir) $(srcdir)/toolbox --update-includes
+stamp-api: Makefile.in $(HEADERS_include) vlc-config vlc-api.pl src/misc/modules_builtin.h.in
+       cd $(srcdir) && cat $(HEADERS_include) | perl ./vlc-api.pl
        touch stamp-api
 
 ###############################################################################
diff --git a/include/vlc_symbols.h b/include/vlc_symbols.h
new file mode 100644 (file)
index 0000000..06e9d3e
--- /dev/null
@@ -0,0 +1,1101 @@
+/*
+ * This file is automatically generated. DO NOT EDIT!
+ * You can force an update with "make stamp-api".
+ */
+
+#ifndef __VLC_SYMBOLS_H
+# define __VLC_SYMBOLS_H
+
+/*
+ * This is the big VLC API structure for plugins :
+ * Changing its layout breaks plugin's binary compatibility,
+ * so DO NOT DO THAT.
+ * In case of conflict with SVN, add your uncommited APIs
+ * at the *end* of the structure so they don't mess the other's
+ * offset in the structure.
+ */
+struct module_symbols_t
+{
+    int (*aout_FiltersCreatePipeline_inner) (aout_instance_t * p_aout, aout_filter_t ** pp_filters, int * pi_nb_filters, const audio_sample_format_t * p_input_format, const audio_sample_format_t * p_output_format);
+    void (*aout_FiltersDestroyPipeline_inner) (aout_instance_t * p_aout, aout_filter_t ** pp_filters, int i_nb_filters);
+    void (*aout_FiltersPlay_inner) (aout_instance_t * p_aout, aout_filter_t ** pp_filters, int i_nb_filters, aout_buffer_t ** pp_input_buffer);
+    aout_buffer_t * (*aout_OutputNextBuffer_inner) (aout_instance_t *, mtime_t, vlc_bool_t);
+    unsigned int (*aout_FormatNbChannels_inner) (const audio_sample_format_t * p_format);
+    void (*aout_FormatPrepare_inner) (audio_sample_format_t * p_format);
+    void (*aout_FormatPrint_inner) (aout_instance_t * p_aout, const char * psz_text, const audio_sample_format_t * p_format);
+    void (*aout_FormatsPrint_inner) (aout_instance_t * p_aout, const char * psz_text, const audio_sample_format_t * p_format1, const audio_sample_format_t * p_format2);
+    const char * (*aout_FormatPrintChannels_inner) (const audio_sample_format_t *);
+    aout_buffer_t * (*aout_FifoPop_inner) (aout_instance_t * p_aout, aout_fifo_t * p_fifo);
+    mtime_t (*aout_FifoFirstDate_inner) (aout_instance_t *, aout_fifo_t *);
+    void (*aout_VolumeSoftInit_inner) (aout_instance_t *);
+    void (*aout_VolumeNoneInit_inner) (aout_instance_t *);
+    aout_instance_t * (*__aout_New_inner) (vlc_object_t *);
+    void (*aout_Delete_inner) (aout_instance_t *);
+    void (*aout_DateInit_inner) (audio_date_t *, uint32_t);
+    void (*aout_DateSet_inner) (audio_date_t *, mtime_t);
+    void (*aout_DateMove_inner) (audio_date_t *, mtime_t);
+    mtime_t (*aout_DateGet_inner) (const audio_date_t *);
+    mtime_t (*aout_DateIncrement_inner) (audio_date_t *, uint32_t);
+    int (*aout_CheckChannelReorder_inner) (const uint32_t *, const uint32_t *, uint32_t, int, int *);
+    void (*aout_ChannelReorder_inner) (uint8_t *, int, int, const int *, int);
+    aout_input_t * (*__aout_DecNew_inner) (vlc_object_t *, aout_instance_t **, audio_sample_format_t *);
+    int (*aout_DecDelete_inner) (aout_instance_t *, aout_input_t *);
+    aout_buffer_t * (*aout_DecNewBuffer_inner) (aout_instance_t *, aout_input_t *, size_t);
+    void (*aout_DecDeleteBuffer_inner) (aout_instance_t *, aout_input_t *, aout_buffer_t *);
+    int (*aout_DecPlay_inner) (aout_instance_t *, aout_input_t *, aout_buffer_t *);
+    int (*__aout_VolumeGet_inner) (vlc_object_t *, audio_volume_t *);
+    int (*__aout_VolumeSet_inner) (vlc_object_t *, audio_volume_t);
+    int (*__aout_VolumeInfos_inner) (vlc_object_t *, audio_volume_t *);
+    int (*__aout_VolumeUp_inner) (vlc_object_t *, int, audio_volume_t *);
+    int (*__aout_VolumeDown_inner) (vlc_object_t *, int, audio_volume_t *);
+    int (*__aout_VolumeMute_inner) (vlc_object_t *, audio_volume_t *);
+    int (*aout_Restart_inner) (aout_instance_t * p_aout);
+    int (*aout_FindAndRestart_inner) (vlc_object_t *, const char *, vlc_value_t, vlc_value_t, void *);
+    int (*aout_ChannelsRestart_inner) (vlc_object_t *, const char *, vlc_value_t, vlc_value_t, void *);
+    vlc_bool_t (*vlc_current_charset_inner) (char **);
+    int (*__config_GetType_inner) (vlc_object_t *, const char *);
+    int (*__config_GetInt_inner) (vlc_object_t *, const char *);
+    void (*__config_PutInt_inner) (vlc_object_t *, const char *, int);
+    float (*__config_GetFloat_inner) (vlc_object_t *, const char *);
+    void (*__config_PutFloat_inner) (vlc_object_t *, const char *, float);
+    char * (*__config_GetPsz_inner) (vlc_object_t *, const char *);
+    void (*__config_PutPsz_inner) (vlc_object_t *, const char *, const char *);
+    int (*__config_LoadCmdLine_inner) (vlc_object_t *, int *, char *[], vlc_bool_t);
+    char * (*config_GetHomeDir_inner) (void);
+    int (*__config_LoadConfigFile_inner) (vlc_object_t *, const char *);
+    int (*__config_SaveConfigFile_inner) (vlc_object_t *, const char *);
+    void (*__config_ResetAll_inner) (vlc_object_t *);
+    module_config_t * (*config_FindConfig_inner) (vlc_object_t *, const char *);
+    module_t * (*config_FindModule_inner) (vlc_object_t *, const char *);
+    void (*config_Duplicate_inner) (module_t *, module_config_t *);
+    void (*config_SetCallbacks_inner) (module_config_t *, module_config_t *);
+    void (*config_UnsetCallbacks_inner) (module_config_t *);
+    int (*__intf_Eject_inner) (vlc_object_t *, const char *);
+    const iso639_lang_t * (*GetLang_1_inner) (const char *);
+    const iso639_lang_t * (*GetLang_2T_inner) (const char *);
+    const iso639_lang_t * (*GetLang_2B_inner) (const char *);
+    const char * (*DecodeLanguage_inner) (uint16_t);
+    module_t * (*__module_Need_inner) (vlc_object_t *, const char *, const char *, vlc_bool_t);
+    void (*__module_Unneed_inner) (vlc_object_t *, module_t *);
+    char * (*mstrtime_inner) (char *psz_buffer, mtime_t date);
+    mtime_t (*mdate_inner) (void);
+    void (*mwait_inner) (mtime_t date);
+    void (*msleep_inner) (mtime_t delay);
+    char * (*secstotimestr_inner) (char *psz_buffer, int secs);
+    void (*date_Init_inner) (date_t *, uint32_t, uint32_t);
+    void (*date_Change_inner) (date_t *, uint32_t, uint32_t);
+    void (*date_Set_inner) (date_t *, mtime_t);
+    mtime_t (*date_Get_inner) (const date_t *);
+    void (*date_Move_inner) (date_t *, mtime_t);
+    mtime_t (*date_Increment_inner) (date_t *, uint32_t);
+    void *net_ConvertIPv4_deprecated;
+    int (*__net_OpenTCP_inner) (vlc_object_t *p_this, const char *psz_host, int i_port);
+    int * (*__net_ListenTCP_inner) (vlc_object_t *, const char *, int);
+    int (*__net_Accept_inner) (vlc_object_t *, int *, mtime_t);
+    int (*__net_OpenUDP_inner) (vlc_object_t *p_this, char *psz_bind, int i_bind, char *psz_server, int i_server);
+    void (*net_Close_inner) (int fd);
+    int (*__net_Read_inner) (vlc_object_t *p_this, int fd, v_socket_t *, uint8_t *p_data, int i_data, vlc_bool_t b_retry);
+    int (*__net_ReadNonBlock_inner) (vlc_object_t *p_this, int fd, v_socket_t *, uint8_t *p_data, int i_data, mtime_t i_wait);
+    int (*__net_Select_inner) (vlc_object_t *p_this, int *pi_fd, v_socket_t **, int i_fd, uint8_t *p_data, int i_data, mtime_t i_wait);
+    int (*__net_Write_inner) (vlc_object_t *p_this, int fd, v_socket_t *, uint8_t *p_data, int i_data);
+    char * (*__net_Gets_inner) (vlc_object_t *p_this, int fd, v_socket_t *);
+    int (*net_Printf_inner) (vlc_object_t *p_this, int fd, v_socket_t *, const char *psz_fmt, ...);
+    int (*__net_vaPrintf_inner) (vlc_object_t *p_this, int fd, v_socket_t *, const char *psz_fmt, va_list args);
+    int (*vout_ShowTextRelative_inner) (vout_thread_t *, int, char *, text_style_t *, int, int, int, mtime_t);
+    int (*vout_ShowTextAbsolute_inner) (vout_thread_t *, int, char *, text_style_t *, int, int, int, mtime_t, mtime_t);
+    void (*__vout_OSDMessage_inner) (vlc_object_t *, int, char *, ...);
+    void (*vout_OSDSlider_inner) (vlc_object_t *, int, int , short);
+    void (*vout_OSDIcon_inner) (vlc_object_t *, int, short);
+    void (*__sout_CfgParse_inner) (vlc_object_t *, char *psz_prefix, const char **ppsz_options, sout_cfg_t *);
+    char * (*sout_CfgCreate_inner) (char **, sout_cfg_t **, char *);
+    sout_instance_t * (*__sout_NewInstance_inner) (vlc_object_t *, char *);
+    void (*sout_DeleteInstance_inner) (sout_instance_t *);
+    sout_packetizer_input_t * (*sout_InputNew_inner) (sout_instance_t *, es_format_t *);
+    int (*sout_InputDelete_inner) (sout_packetizer_input_t *);
+    int (*sout_InputSendBuffer_inner) (sout_packetizer_input_t *, block_t*);
+    sout_access_out_t * (*sout_AccessOutNew_inner) (sout_instance_t *, char *psz_access, char *psz_name);
+    void (*sout_AccessOutDelete_inner) (sout_access_out_t *);
+    int (*sout_AccessOutSeek_inner) (sout_access_out_t *, off_t);
+    int (*sout_AccessOutRead_inner) (sout_access_out_t *, block_t *);
+    int (*sout_AccessOutWrite_inner) (sout_access_out_t *, block_t *);
+    sout_mux_t * (*sout_MuxNew_inner) (sout_instance_t*, char *, sout_access_out_t *);
+    sout_input_t * (*sout_MuxAddStream_inner) (sout_mux_t *, es_format_t *);
+    void (*sout_MuxDeleteStream_inner) (sout_mux_t *, sout_input_t *);
+    void (*sout_MuxDelete_inner) (sout_mux_t *);
+    void (*sout_MuxSendBuffer_inner) (sout_mux_t *, sout_input_t  *, block_t *);
+    sout_stream_t * (*sout_StreamNew_inner) (sout_instance_t *, char *psz_chain);
+    void (*sout_StreamDelete_inner) (sout_stream_t *);
+    int (*sout_AnnounceRegister_inner) (sout_instance_t *,session_descriptor_t*, announce_method_t*);
+    session_descriptor_t* (*sout_AnnounceRegisterSDP_inner) (sout_instance_t *,char *, announce_method_t*);
+    int (*sout_AnnounceUnRegister_inner) (sout_instance_t *,session_descriptor_t*);
+    void (*sout_AnnounceSessionDestroy_inner) (session_descriptor_t *);
+    announce_method_t* (*sout_AnnounceMethodCreate_inner) (int);
+    int (*__var_Create_inner) (vlc_object_t *, const char *, int);
+    int (*__var_Destroy_inner) (vlc_object_t *, const char *);
+    int (*__var_Change_inner) (vlc_object_t *, const char *, int, vlc_value_t *, vlc_value_t *);
+    int (*__var_Type_inner) (vlc_object_t *, const char *);
+    int (*__var_Set_inner) (vlc_object_t *, const char *, vlc_value_t);
+    int (*__var_Get_inner) (vlc_object_t *, const char *, vlc_value_t *);
+    int (*__var_AddCallback_inner) (vlc_object_t *, const char *, vlc_callback_t, void *);
+    int (*__var_DelCallback_inner) (vlc_object_t *, const char *, vlc_callback_t, void *);
+    vout_thread_t * (*__vout_Request_inner) (vlc_object_t *, vout_thread_t *, video_format_t *);
+    vout_thread_t * (*__vout_Create_inner) (vlc_object_t *, video_format_t *);
+    void (*vout_Destroy_inner) (vout_thread_t *);
+    int (*vout_VarCallback_inner) (vlc_object_t *, const char *, vlc_value_t, vlc_value_t, void *);
+    int (*vout_ChromaCmp_inner) (uint32_t, uint32_t);
+    picture_t * (*vout_CreatePicture_inner) (vout_thread_t *, vlc_bool_t, vlc_bool_t, unsigned int);
+    void (*vout_InitFormat_inner) (video_frame_format_t *, uint32_t, int, int, int);
+    void (*vout_DestroyPicture_inner) (vout_thread_t *, picture_t *);
+    void (*vout_DisplayPicture_inner) (vout_thread_t *, picture_t *);
+    void (*vout_DatePicture_inner) (vout_thread_t *, picture_t *, mtime_t);
+    void (*vout_LinkPicture_inner) (vout_thread_t *, picture_t *);
+    void (*vout_UnlinkPicture_inner) (vout_thread_t *, picture_t *);
+    void (*vout_PlacePicture_inner) (vout_thread_t *, unsigned int, unsigned int, unsigned int *, unsigned int *, unsigned int *, unsigned int *);
+    int (*vout_vaControlDefault_inner) (vout_thread_t *, int, va_list);
+    void * (*vout_RequestWindow_inner) (vout_thread_t *, int *, int *, unsigned int *, unsigned int *);
+    void (*vout_ReleaseWindow_inner) (vout_thread_t *, void *);
+    int (*vout_ControlWindow_inner) (vout_thread_t *, void *, int, va_list);
+    access_t * (*__access2_New_inner) (vlc_object_t *p_obj, char *psz_access, char *psz_demux, char *psz_path, vlc_bool_t b_quick);
+    access_t * (*access2_FilterNew_inner) (access_t *p_source, char *psz_access_filter);
+    void (*access2_Delete_inner) (access_t *);
+    block_t * (*__block_New_inner) (vlc_object_t *, int);
+    block_t * (*block_Realloc_inner) (block_t *, int i_pre, int i_body);
+    block_fifo_t * (*__block_FifoNew_inner) (vlc_object_t *);
+    void (*block_FifoRelease_inner) (block_fifo_t *);
+    void (*block_FifoEmpty_inner) (block_fifo_t *);
+    int (*block_FifoPut_inner) (block_fifo_t *, block_t *);
+    block_t * (*block_FifoGet_inner) (block_fifo_t *);
+    block_t * (*block_FifoShow_inner) (block_fifo_t *);
+    char * (*vlc_strdup_inner) (const char *s);
+    int (*vlc_vasprintf_inner) (char **, const char *, va_list);
+    int (*vlc_asprintf_inner) (char **, const char *, ...);
+    char * (*vlc_strndup_inner) (const char *s, size_t n);
+    double (*vlc_atof_inner) (const char *nptr);
+    int64_t (*vlc_atoll_inner) (const char *nptr);
+    int64_t (*vlc_strtoll_inner) (const char *nptr, char **endptr, int base);
+    char * (*vlc_getenv_inner) (const char *name);
+    int (*vlc_strcasecmp_inner) (const char *s1, const char *s2);
+    int (*vlc_strncasecmp_inner) (const char *s1, const char *s2, size_t n);
+    char * (*vlc_strcasestr_inner) (const char *s1, const char *s2);
+    void * (*vlc_opendir_inner) (const char *);
+    void * (*vlc_readdir_inner) (void *);
+    int (*vlc_closedir_inner) (void *);
+    vlc_bool_t (*vlc_reduce_inner) (int *, int *, int64_t, int64_t, int64_t);
+    char ** (*vlc_parse_cmdline_inner) (const char *, int *);
+    char * (*vlc_wraptext_inner) (const char *, int, vlc_bool_t);
+    vlc_iconv_t (*vlc_iconv_open_inner) (const char *, const char *);
+    size_t (*vlc_iconv_inner) (vlc_iconv_t, char **, size_t *, char **, size_t *);
+    int (*vlc_iconv_close_inner) (vlc_iconv_t);
+    char * (*vlc_dgettext_inner) (const char *package, const char *msgid);
+    demux_t * (*__demux2_New_inner) (vlc_object_t *p_obj, char *psz_access, char *psz_demux, char *psz_path, stream_t *s, es_out_t *out, vlc_bool_t);
+    void (*demux2_Delete_inner) (demux_t *);
+    int (*demux2_vaControlHelper_inner) (stream_t *, int64_t i_start, int64_t i_end, int i_bitrate, int i_align, int i_query, va_list args);
+    char const * (*vlc_error_inner) (int);
+    httpd_host_t * (*httpd_HostNew_inner) (vlc_object_t *, const char *psz_host, int i_port);
+    httpd_host_t * (*httpd_TLSHostNew_inner) (vlc_object_t *, const char *, int, const char *, const char *, const char *, const char *);
+    void (*httpd_HostDelete_inner) (httpd_host_t *);
+    httpd_url_t * (*httpd_UrlNew_inner) (httpd_host_t *, char *psz_url, char *psz_user, char *psz_password);
+    httpd_url_t * (*httpd_UrlNewUnique_inner) (httpd_host_t *, char *psz_url, char *psz_user, char *psz_password);
+    int (*httpd_UrlCatch_inner) (httpd_url_t *, int i_msg, httpd_callback_t, httpd_callback_sys_t *);
+    void (*httpd_UrlDelete_inner) (httpd_url_t *);
+    void (*httpd_ClientModeStream_inner) (httpd_client_t *cl);
+    void (*httpd_ClientModeBidir_inner) (httpd_client_t *cl);
+    char* (*httpd_ClientIP_inner) (httpd_client_t *cl);
+    httpd_file_t * (*httpd_FileNew_inner) (httpd_host_t *, char *psz_url, char *psz_mime, char *psz_user, char *psz_password, httpd_file_callback_t pf_fill, httpd_file_sys_t *);
+    void (*httpd_FileDelete_inner) (httpd_file_t *);
+    httpd_redirect_t * (*httpd_RedirectNew_inner) (httpd_host_t *, char *psz_url_dst, char *psz_url_src);
+    void (*httpd_RedirectDelete_inner) (httpd_redirect_t *);
+    httpd_stream_t * (*httpd_StreamNew_inner) (httpd_host_t *, char *psz_url, char *psz_mime, char *psz_user, char *psz_password);
+    void (*httpd_StreamDelete_inner) (httpd_stream_t *);
+    int (*httpd_StreamHeader_inner) (httpd_stream_t *, uint8_t *p_data, int i_data);
+    int (*httpd_StreamSend_inner) (httpd_stream_t *, uint8_t *p_data, int i_data);
+    void (*httpd_MsgInit_inner) (httpd_message_t *);
+    void (*httpd_MsgAdd_inner) (httpd_message_t *, char *psz_name, char *psz_value, ...);
+    char * (*httpd_MsgGet_inner) (httpd_message_t *, char *psz_name);
+    void (*httpd_MsgClean_inner) (httpd_message_t *);
+    tls_server_t * (*tls_ServerCreate_inner) (vlc_object_t *, const char *, const char *);
+    void (*tls_ServerDelete_inner) (tls_server_t *);
+    tls_session_t * (*tls_ClientCreate_inner) (vlc_object_t *, int, const char *);
+    void (*tls_ClientDelete_inner) (tls_session_t *);
+    image_handler_t * (*__image_HandlerCreate_inner) (vlc_object_t *);
+    void (*image_HandlerDelete_inner) (image_handler_t *);
+    char * (*vlc_input_item_GetInfo_inner) (input_item_t *p_i, const char *psz_cat,const char *psz_name);
+    int (*vlc_input_item_AddInfo_inner) (input_item_t *p_i, const char *psz_cat, const char *psz_name, const char *psz_format, ...);
+    input_thread_t * (*__input_CreateThread_inner) (vlc_object_t *, input_item_t *);
+    int (*__input_Preparse_inner) (vlc_object_t *, input_item_t *);
+    void (*input_StopThread_inner) (input_thread_t *);
+    void (*input_DestroyThread_inner) (input_thread_t *);
+    int (*input_vaControl_inner) (input_thread_t *, int i_query, va_list);
+    int (*input_Control_inner) (input_thread_t *, int i_query, ...);
+    decoder_t * (*input_DecoderNew_inner) (input_thread_t *, es_format_t *, vlc_bool_t b_force_decoder);
+    void (*input_DecoderDelete_inner) (decoder_t *);
+    void (*input_DecoderDecode_inner) (decoder_t *, block_t *);
+    intf_thread_t * (*__intf_Create_inner) (vlc_object_t *, const char *);
+    int (*intf_RunThread_inner) (intf_thread_t *);
+    void (*intf_StopThread_inner) (intf_thread_t *);
+    void (*intf_Destroy_inner) (intf_thread_t *);
+    void (*__msg_Generic_inner) (vlc_object_t *, int, const char *, const char *, ... ) ATTRIBUTE_FORMAT( 4, 5);
+    void (*__msg_GenericVa_inner) (vlc_object_t *, int, const char *, const char *, va_list args);
+    void (*__msg_Info_inner) (vlc_object_t *, const char *, ... ) ATTRIBUTE_FORMAT( 2, 3);
+    void (*__msg_Err_inner) (vlc_object_t *, const char *, ... ) ATTRIBUTE_FORMAT( 2, 3);
+    void (*__msg_Warn_inner) (vlc_object_t *, const char *, ... ) ATTRIBUTE_FORMAT( 2, 3);
+    void (*__msg_Dbg_inner) (vlc_object_t *, const char *, ... ) ATTRIBUTE_FORMAT( 2, 3);
+    msg_subscription_t* (*__msg_Subscribe_inner) (vlc_object_t *);
+    void (*__msg_Unsubscribe_inner) (vlc_object_t *, msg_subscription_t *);
+    void * (*__vlc_object_create_inner) (vlc_object_t *, int);
+    void (*__vlc_object_destroy_inner) (vlc_object_t *);
+    void (*__vlc_object_attach_inner) (vlc_object_t *, vlc_object_t *);
+    void (*__vlc_object_detach_inner) (vlc_object_t *);
+    void * (*__vlc_object_get_inner) (vlc_object_t *, int);
+    void * (*__vlc_object_find_inner) (vlc_object_t *, int, int);
+    void (*__vlc_object_yield_inner) (vlc_object_t *);
+    void (*__vlc_object_release_inner) (vlc_object_t *);
+    vlc_list_t * (*__vlc_list_find_inner) (vlc_object_t *, int, int);
+    void (*vlc_list_release_inner) (vlc_list_t *);
+    int (*playlist_Control_inner) (playlist_t *, int, ...);
+    int (*playlist_LockControl_inner) (playlist_t *, int, ...);
+    int (*playlist_Clear_inner) (playlist_t *);
+    int (*playlist_LockClear_inner) (playlist_t *);
+    int (*playlist_PreparseEnqueue_inner) (playlist_t *, input_item_t *);
+    int (*playlist_ServicesDiscoveryAdd_inner) (playlist_t *, const char *);
+    int (*playlist_ServicesDiscoveryRemove_inner) (playlist_t *, const char *);
+    int (*playlist_AddSDModules_inner) (playlist_t *, char *);
+    vlc_bool_t (*playlist_IsServicesDiscoveryLoaded_inner) (playlist_t *,const char *);
+    playlist_item_t* (*__playlist_ItemNew_inner) (vlc_object_t *,const char *,const char *);
+    playlist_item_t* (*__playlist_ItemCopy_inner) (vlc_object_t *,playlist_item_t*);
+    playlist_item_t* (*playlist_ItemNewWithType_inner) (vlc_object_t *,const char *,const char *, int);
+    int (*playlist_ItemDelete_inner) (playlist_item_t *);
+    int (*playlist_ItemAddParent_inner) (playlist_item_t *, int,playlist_item_t *);
+    int (*playlist_CopyParents_inner) (playlist_item_t *,playlist_item_t *);
+    int (*playlist_ItemSetName_inner) (playlist_item_t *,  char *);
+    int (*playlist_ItemSetDuration_inner) (playlist_item_t *, mtime_t);
+    int (*playlist_ViewInsert_inner) (playlist_t *, int, char *);
+    int (*playlist_ViewDelete_inner) (playlist_t *,playlist_view_t*);
+    playlist_view_t * (*playlist_ViewFind_inner) (playlist_t *, int);
+    int (*playlist_ViewUpdate_inner) (playlist_t *, int);
+    int (*playlist_ViewDump_inner) (playlist_t *, playlist_view_t *);
+    int (*playlist_ViewEmpty_inner) (playlist_t *, int, vlc_bool_t);
+    playlist_item_t * (*playlist_NodeCreate_inner) (playlist_t *,int,char *, playlist_item_t * p_parent);
+    int (*playlist_NodeAppend_inner) (playlist_t *,int,playlist_item_t*,playlist_item_t *);
+    int (*playlist_NodeInsert_inner) (playlist_t *,int,playlist_item_t*,playlist_item_t *, int);
+    int (*playlist_NodeRemoveItem_inner) (playlist_t *,playlist_item_t*,playlist_item_t *);
+    int (*playlist_NodeChildrenCount_inner) (playlist_t *,playlist_item_t*);
+    playlist_item_t * (*playlist_ChildSearchName_inner) (playlist_item_t*, const char*);
+    int (*playlist_NodeDelete_inner) (playlist_t *, playlist_item_t *, vlc_bool_t , vlc_bool_t);
+    int (*playlist_NodeEmpty_inner) (playlist_t *, playlist_item_t *, vlc_bool_t);
+    int (*playlist_Add_inner) (playlist_t *, const char *, const char *, int, int);
+    int (*playlist_AddExt_inner) (playlist_t *, const char *, const char *, int, int, mtime_t, const char **,int);
+    int (*playlist_ItemAdd_inner) (playlist_t *, playlist_item_t *, int, int);
+    int (*playlist_NodeAddItem_inner) (playlist_t *, playlist_item_t *,int,playlist_item_t *,int , int);
+    int (*playlist_Delete_inner) (playlist_t *, int);
+    int (*playlist_LockDelete_inner) (playlist_t *, int);
+    int (*playlist_Disable_inner) (playlist_t *, playlist_item_t *);
+    int (*playlist_Enable_inner) (playlist_t *, playlist_item_t *);
+    int (*playlist_ItemToNode_inner) (playlist_t *,playlist_item_t *);
+    int (*playlist_LockItemToNode_inner) (playlist_t *,playlist_item_t *);
+    int (*playlist_Replace_inner) (playlist_t *,playlist_item_t *, input_item_t*);
+    int (*playlist_LockReplace_inner) (playlist_t *,playlist_item_t *, input_item_t*);
+    playlist_item_t * (*playlist_ItemGetById_inner) (playlist_t *, int);
+    playlist_item_t * (*playlist_LockItemGetById_inner) (playlist_t *, int);
+    playlist_item_t * (*playlist_ItemGetByPos_inner) (playlist_t *, int);
+    playlist_item_t * (*playlist_LockItemGetByPos_inner) (playlist_t *, int);
+    playlist_item_t * (*playlist_ItemGetByInput_inner) (playlist_t *,input_item_t *);
+    playlist_item_t * (*playlist_LockItemGetByInput_inner) (playlist_t *,input_item_t *);
+    int (*playlist_GetPositionById_inner) (playlist_t *,int);
+    int (*playlist_ItemAddOption_inner) (playlist_item_t *, const char *);
+    int (*playlist_Sort_inner) (playlist_t *, int, int);
+    int (*playlist_Move_inner) (playlist_t *, int, int);
+    int (*playlist_NodeGroup_inner) (playlist_t *, int,playlist_item_t *,playlist_item_t **,int, int, int);
+    int (*playlist_NodeSort_inner) (playlist_t *, playlist_item_t *,int, int);
+    int (*playlist_RecursiveNodeSort_inner) (playlist_t *, playlist_item_t *,int, int);
+    int (*playlist_Import_inner) (playlist_t *, const char *);
+    int (*playlist_Export_inner) (playlist_t *, const char *, const char *);
+    spu_t * (*__spu_Create_inner) (vlc_object_t *);
+    int (*spu_Init_inner) (spu_t *);
+    void (*spu_Destroy_inner) (spu_t *);
+    subpicture_t * (*spu_CreateSubpicture_inner) (spu_t *);
+    void (*spu_DestroySubpicture_inner) (spu_t *, subpicture_t *);
+    void (*spu_DisplaySubpicture_inner) (spu_t *, subpicture_t *);
+    subpicture_region_t * (*__spu_CreateRegion_inner) (vlc_object_t *, video_format_t *);
+    subpicture_region_t * (*__spu_MakeRegion_inner) (vlc_object_t *, video_format_t *, picture_t *);
+    void (*__spu_DestroyRegion_inner) (vlc_object_t *, subpicture_region_t *);
+    subpicture_t * (*spu_SortSubpictures_inner) (spu_t *, mtime_t);
+    void (*spu_RenderSubpictures_inner) (spu_t *,  video_format_t *, picture_t *, picture_t *, subpicture_t *, int, int);
+    char * (*stream_ReadLine_inner) (stream_t *);
+    stream_t * (*__stream_DemuxNew_inner) (vlc_object_t *p_obj, char *psz_demux, es_out_t *out);
+    void (*stream_DemuxSend_inner) (stream_t *s, block_t *p_block);
+    void (*stream_DemuxDelete_inner) (stream_t *s);
+    stream_t * (*__stream_MemoryNew_inner) (vlc_object_t *p_obj, uint8_t *p_buffer, int64_t i_size, vlc_bool_t i_preserve_memory);
+    stream_t * (*__stream_UrlNew_inner) (vlc_object_t *p_this, const char *psz_url);
+    int (*__vlc_threads_init_inner) (vlc_object_t *);
+    int (*__vlc_threads_end_inner) (vlc_object_t *);
+    int (*__vlc_mutex_init_inner) (vlc_object_t *, vlc_mutex_t *);
+    int (*__vlc_mutex_destroy_inner) (char *, int, vlc_mutex_t *);
+    int (*__vlc_cond_init_inner) (vlc_object_t *, vlc_cond_t *);
+    int (*__vlc_cond_destroy_inner) (char *, int, vlc_cond_t *);
+    int (*__vlc_thread_create_inner) (vlc_object_t *, char *, int, char *, void * ( * ) ( void * ), int, vlc_bool_t);
+    int (*__vlc_thread_set_priority_inner) (vlc_object_t *, char *, int, int);
+    void (*__vlc_thread_ready_inner) (vlc_object_t *);
+    void (*__vlc_thread_join_inner) (vlc_object_t *, char *, int);
+    void (*__vout_CopyPicture_inner) (vlc_object_t *p_this, picture_t *p_dst, picture_t *p_src);
+    int (*__vout_InitPicture_inner) (vlc_object_t *p_this, picture_t *p_pic, uint32_t i_chroma, int i_width, int i_height, int i_aspect);
+    int (*__vout_AllocatePicture_inner) (vlc_object_t *p_this, picture_t *p_pic, uint32_t i_chroma, int i_width, int i_height, int i_aspect);
+    vlm_t * (*__vlm_New_inner) (vlc_object_t *);
+    void (*vlm_Delete_inner) (vlm_t *);
+    int (*vlm_ExecuteCommand_inner) (vlm_t *, char *, vlm_message_t **);
+    void (*vlm_MessageDelete_inner) (vlm_message_t *);
+    vlm_media_t * (*vlm_MediaNew_inner) (vlm_t *, char *, int);
+    void (*vlm_MediaDelete_inner) (vlm_t *, vlm_media_t *, char *);
+    int (*vlm_MediaSetup_inner) (vlm_t *, vlm_media_t *, char *, char *);
+    int (*vlm_MediaControl_inner) (vlm_t *, vlm_media_t *, char *, char *, char *);
+    vlm_schedule_t * (*vlm_ScheduleNew_inner) (vlm_t *, char *);
+    void (*vlm_ScheduleDelete_inner) (vlm_t *, vlm_schedule_t *, char *);
+    int (*vlm_ScheduleSetup_inner) (vlm_schedule_t *, char *, char *);
+    int (*vlm_MediaVodControl_inner) (void *, vod_media_t *, char *, int, va_list);
+    int (*vlm_Save_inner) (vlm_t *, char *);
+    int (*vlm_Load_inner) (vlm_t *, char *);
+    xml_t * (*__xml_Create_inner) (vlc_object_t *);
+    void (*xml_Delete_inner) (xml_t *);
+    vout_synchro_t * (*__vout_SynchroInit_inner) (vlc_object_t *, int);
+    void (*vout_SynchroRelease_inner) (vout_synchro_t *);
+    void (*vout_SynchroReset_inner) (vout_synchro_t *);
+    vlc_bool_t (*vout_SynchroChoose_inner) (vout_synchro_t *, int, int, vlc_bool_t);
+    void (*vout_SynchroTrash_inner) (vout_synchro_t *);
+    void (*vout_SynchroDecode_inner) (vout_synchro_t *);
+    void (*vout_SynchroEnd_inner) (vout_synchro_t *, int, vlc_bool_t);
+    mtime_t (*vout_SynchroDate_inner) (vout_synchro_t *);
+    void (*vout_SynchroNewPicture_inner) (vout_synchro_t *, int, int, mtime_t, mtime_t, int, vlc_bool_t);
+    int (*vlc_getaddrinfo_inner) (vlc_object_t *, const char *, const char *, const struct addrinfo *, struct addrinfo **);
+    int (*vlc_getnameinfo_inner) (vlc_object_t *, const struct sockaddr *, int, char *, int, char *, int, int);
+    void (*InitMD5_inner) (struct md5_s *);
+    void (*EndMD5_inner) (struct md5_s *);
+    void (*vlc_freeaddrinfo_inner) (struct addrinfo *);
+    void (*AddMD5_inner) (struct md5_s *, const uint8_t *, uint32_t);
+    const char * (*vlc_gai_strerror_inner) (int);
+    void (*net_ListenClose_inner) (int *fd);
+    void (*DigestMD5_inner) (struct md5_s *, uint32_t *);
+};
+# if defined (__PLUGIN__)
+#  define aout_FiltersCreatePipeline (p_symbols)->aout_FiltersCreatePipeline_inner
+#  define aout_FiltersDestroyPipeline (p_symbols)->aout_FiltersDestroyPipeline_inner
+#  define aout_FiltersPlay (p_symbols)->aout_FiltersPlay_inner
+#  define aout_OutputNextBuffer (p_symbols)->aout_OutputNextBuffer_inner
+#  define aout_FormatNbChannels (p_symbols)->aout_FormatNbChannels_inner
+#  define aout_FormatPrepare (p_symbols)->aout_FormatPrepare_inner
+#  define aout_FormatPrint (p_symbols)->aout_FormatPrint_inner
+#  define aout_FormatsPrint (p_symbols)->aout_FormatsPrint_inner
+#  define aout_FormatPrintChannels (p_symbols)->aout_FormatPrintChannels_inner
+#  define aout_FifoPop (p_symbols)->aout_FifoPop_inner
+#  define aout_FifoFirstDate (p_symbols)->aout_FifoFirstDate_inner
+#  define aout_VolumeSoftInit (p_symbols)->aout_VolumeSoftInit_inner
+#  define aout_VolumeNoneInit (p_symbols)->aout_VolumeNoneInit_inner
+#  define __aout_New (p_symbols)->__aout_New_inner
+#  define aout_Delete (p_symbols)->aout_Delete_inner
+#  define aout_DateInit (p_symbols)->aout_DateInit_inner
+#  define aout_DateSet (p_symbols)->aout_DateSet_inner
+#  define aout_DateMove (p_symbols)->aout_DateMove_inner
+#  define aout_DateGet (p_symbols)->aout_DateGet_inner
+#  define aout_DateIncrement (p_symbols)->aout_DateIncrement_inner
+#  define aout_CheckChannelReorder (p_symbols)->aout_CheckChannelReorder_inner
+#  define aout_ChannelReorder (p_symbols)->aout_ChannelReorder_inner
+#  define __aout_DecNew (p_symbols)->__aout_DecNew_inner
+#  define aout_DecDelete (p_symbols)->aout_DecDelete_inner
+#  define aout_DecNewBuffer (p_symbols)->aout_DecNewBuffer_inner
+#  define aout_DecDeleteBuffer (p_symbols)->aout_DecDeleteBuffer_inner
+#  define aout_DecPlay (p_symbols)->aout_DecPlay_inner
+#  define __aout_VolumeGet (p_symbols)->__aout_VolumeGet_inner
+#  define __aout_VolumeSet (p_symbols)->__aout_VolumeSet_inner
+#  define __aout_VolumeInfos (p_symbols)->__aout_VolumeInfos_inner
+#  define __aout_VolumeUp (p_symbols)->__aout_VolumeUp_inner
+#  define __aout_VolumeDown (p_symbols)->__aout_VolumeDown_inner
+#  define __aout_VolumeMute (p_symbols)->__aout_VolumeMute_inner
+#  define aout_Restart (p_symbols)->aout_Restart_inner
+#  define aout_FindAndRestart (p_symbols)->aout_FindAndRestart_inner
+#  define aout_ChannelsRestart (p_symbols)->aout_ChannelsRestart_inner
+#  define vlc_current_charset (p_symbols)->vlc_current_charset_inner
+#  define __config_GetType (p_symbols)->__config_GetType_inner
+#  define __config_GetInt (p_symbols)->__config_GetInt_inner
+#  define __config_PutInt (p_symbols)->__config_PutInt_inner
+#  define __config_GetFloat (p_symbols)->__config_GetFloat_inner
+#  define __config_PutFloat (p_symbols)->__config_PutFloat_inner
+#  define __config_GetPsz (p_symbols)->__config_GetPsz_inner
+#  define __config_PutPsz (p_symbols)->__config_PutPsz_inner
+#  define __config_LoadCmdLine (p_symbols)->__config_LoadCmdLine_inner
+#  define config_GetHomeDir (p_symbols)->config_GetHomeDir_inner
+#  define __config_LoadConfigFile (p_symbols)->__config_LoadConfigFile_inner
+#  define __config_SaveConfigFile (p_symbols)->__config_SaveConfigFile_inner
+#  define __config_ResetAll (p_symbols)->__config_ResetAll_inner
+#  define config_FindConfig (p_symbols)->config_FindConfig_inner
+#  define config_FindModule (p_symbols)->config_FindModule_inner
+#  define config_Duplicate (p_symbols)->config_Duplicate_inner
+#  define config_SetCallbacks (p_symbols)->config_SetCallbacks_inner
+#  define config_UnsetCallbacks (p_symbols)->config_UnsetCallbacks_inner
+#  define __intf_Eject (p_symbols)->__intf_Eject_inner
+#  define GetLang_1 (p_symbols)->GetLang_1_inner
+#  define GetLang_2T (p_symbols)->GetLang_2T_inner
+#  define GetLang_2B (p_symbols)->GetLang_2B_inner
+#  define DecodeLanguage (p_symbols)->DecodeLanguage_inner
+#  define __module_Need (p_symbols)->__module_Need_inner
+#  define __module_Unneed (p_symbols)->__module_Unneed_inner
+#  define mstrtime (p_symbols)->mstrtime_inner
+#  define mdate (p_symbols)->mdate_inner
+#  define mwait (p_symbols)->mwait_inner
+#  define msleep (p_symbols)->msleep_inner
+#  define secstotimestr (p_symbols)->secstotimestr_inner
+#  define date_Init (p_symbols)->date_Init_inner
+#  define date_Change (p_symbols)->date_Change_inner
+#  define date_Set (p_symbols)->date_Set_inner
+#  define date_Get (p_symbols)->date_Get_inner
+#  define date_Move (p_symbols)->date_Move_inner
+#  define date_Increment (p_symbols)->date_Increment_inner
+#  define __net_OpenTCP (p_symbols)->__net_OpenTCP_inner
+#  define __net_ListenTCP (p_symbols)->__net_ListenTCP_inner
+#  define __net_Accept (p_symbols)->__net_Accept_inner
+#  define __net_OpenUDP (p_symbols)->__net_OpenUDP_inner
+#  define net_Close (p_symbols)->net_Close_inner
+#  define __net_Read (p_symbols)->__net_Read_inner
+#  define __net_ReadNonBlock (p_symbols)->__net_ReadNonBlock_inner
+#  define __net_Select (p_symbols)->__net_Select_inner
+#  define __net_Write (p_symbols)->__net_Write_inner
+#  define __net_Gets (p_symbols)->__net_Gets_inner
+#  define net_Printf (p_symbols)->net_Printf_inner
+#  define __net_vaPrintf (p_symbols)->__net_vaPrintf_inner
+#  define vout_ShowTextRelative (p_symbols)->vout_ShowTextRelative_inner
+#  define vout_ShowTextAbsolute (p_symbols)->vout_ShowTextAbsolute_inner
+#  define __vout_OSDMessage (p_symbols)->__vout_OSDMessage_inner
+#  define vout_OSDSlider (p_symbols)->vout_OSDSlider_inner
+#  define vout_OSDIcon (p_symbols)->vout_OSDIcon_inner
+#  define __sout_CfgParse (p_symbols)->__sout_CfgParse_inner
+#  define sout_CfgCreate (p_symbols)->sout_CfgCreate_inner
+#  define __sout_NewInstance (p_symbols)->__sout_NewInstance_inner
+#  define sout_DeleteInstance (p_symbols)->sout_DeleteInstance_inner
+#  define sout_InputNew (p_symbols)->sout_InputNew_inner
+#  define sout_InputDelete (p_symbols)->sout_InputDelete_inner
+#  define sout_InputSendBuffer (p_symbols)->sout_InputSendBuffer_inner
+#  define sout_AccessOutNew (p_symbols)->sout_AccessOutNew_inner
+#  define sout_AccessOutDelete (p_symbols)->sout_AccessOutDelete_inner
+#  define sout_AccessOutSeek (p_symbols)->sout_AccessOutSeek_inner
+#  define sout_AccessOutRead (p_symbols)->sout_AccessOutRead_inner
+#  define sout_AccessOutWrite (p_symbols)->sout_AccessOutWrite_inner
+#  define sout_MuxNew (p_symbols)->sout_MuxNew_inner
+#  define sout_MuxAddStream (p_symbols)->sout_MuxAddStream_inner
+#  define sout_MuxDeleteStream (p_symbols)->sout_MuxDeleteStream_inner
+#  define sout_MuxDelete (p_symbols)->sout_MuxDelete_inner
+#  define sout_MuxSendBuffer (p_symbols)->sout_MuxSendBuffer_inner
+#  define sout_StreamNew (p_symbols)->sout_StreamNew_inner
+#  define sout_StreamDelete (p_symbols)->sout_StreamDelete_inner
+#  define sout_AnnounceRegister (p_symbols)->sout_AnnounceRegister_inner
+#  define sout_AnnounceRegisterSDP (p_symbols)->sout_AnnounceRegisterSDP_inner
+#  define sout_AnnounceUnRegister (p_symbols)->sout_AnnounceUnRegister_inner
+#  define sout_AnnounceSessionDestroy (p_symbols)->sout_AnnounceSessionDestroy_inner
+#  define sout_AnnounceMethodCreate (p_symbols)->sout_AnnounceMethodCreate_inner
+#  define __var_Create (p_symbols)->__var_Create_inner
+#  define __var_Destroy (p_symbols)->__var_Destroy_inner
+#  define __var_Change (p_symbols)->__var_Change_inner
+#  define __var_Type (p_symbols)->__var_Type_inner
+#  define __var_Set (p_symbols)->__var_Set_inner
+#  define __var_Get (p_symbols)->__var_Get_inner
+#  define __var_AddCallback (p_symbols)->__var_AddCallback_inner
+#  define __var_DelCallback (p_symbols)->__var_DelCallback_inner
+#  define __vout_Request (p_symbols)->__vout_Request_inner
+#  define __vout_Create (p_symbols)->__vout_Create_inner
+#  define vout_Destroy (p_symbols)->vout_Destroy_inner
+#  define vout_VarCallback (p_symbols)->vout_VarCallback_inner
+#  define vout_ChromaCmp (p_symbols)->vout_ChromaCmp_inner
+#  define vout_CreatePicture (p_symbols)->vout_CreatePicture_inner
+#  define vout_InitFormat (p_symbols)->vout_InitFormat_inner
+#  define vout_DestroyPicture (p_symbols)->vout_DestroyPicture_inner
+#  define vout_DisplayPicture (p_symbols)->vout_DisplayPicture_inner
+#  define vout_DatePicture (p_symbols)->vout_DatePicture_inner
+#  define vout_LinkPicture (p_symbols)->vout_LinkPicture_inner
+#  define vout_UnlinkPicture (p_symbols)->vout_UnlinkPicture_inner
+#  define vout_PlacePicture (p_symbols)->vout_PlacePicture_inner
+#  define vout_vaControlDefault (p_symbols)->vout_vaControlDefault_inner
+#  define vout_RequestWindow (p_symbols)->vout_RequestWindow_inner
+#  define vout_ReleaseWindow (p_symbols)->vout_ReleaseWindow_inner
+#  define vout_ControlWindow (p_symbols)->vout_ControlWindow_inner
+#  define __access2_New (p_symbols)->__access2_New_inner
+#  define access2_FilterNew (p_symbols)->access2_FilterNew_inner
+#  define access2_Delete (p_symbols)->access2_Delete_inner
+#  define __block_New (p_symbols)->__block_New_inner
+#  define block_Realloc (p_symbols)->block_Realloc_inner
+#  define __block_FifoNew (p_symbols)->__block_FifoNew_inner
+#  define block_FifoRelease (p_symbols)->block_FifoRelease_inner
+#  define block_FifoEmpty (p_symbols)->block_FifoEmpty_inner
+#  define block_FifoPut (p_symbols)->block_FifoPut_inner
+#  define block_FifoGet (p_symbols)->block_FifoGet_inner
+#  define block_FifoShow (p_symbols)->block_FifoShow_inner
+#  define vlc_strdup (p_symbols)->vlc_strdup_inner
+#  define vlc_vasprintf (p_symbols)->vlc_vasprintf_inner
+#  define vlc_asprintf (p_symbols)->vlc_asprintf_inner
+#  define vlc_strndup (p_symbols)->vlc_strndup_inner
+#  define vlc_atof (p_symbols)->vlc_atof_inner
+#  define vlc_atoll (p_symbols)->vlc_atoll_inner
+#  define vlc_strtoll (p_symbols)->vlc_strtoll_inner
+#  define vlc_getenv (p_symbols)->vlc_getenv_inner
+#  define vlc_strcasecmp (p_symbols)->vlc_strcasecmp_inner
+#  define vlc_strncasecmp (p_symbols)->vlc_strncasecmp_inner
+#  define vlc_strcasestr (p_symbols)->vlc_strcasestr_inner
+#  define vlc_opendir (p_symbols)->vlc_opendir_inner
+#  define vlc_readdir (p_symbols)->vlc_readdir_inner
+#  define vlc_closedir (p_symbols)->vlc_closedir_inner
+#  define vlc_reduce (p_symbols)->vlc_reduce_inner
+#  define vlc_parse_cmdline (p_symbols)->vlc_parse_cmdline_inner
+#  define vlc_wraptext (p_symbols)->vlc_wraptext_inner
+#  define vlc_iconv_open (p_symbols)->vlc_iconv_open_inner
+#  define vlc_iconv (p_symbols)->vlc_iconv_inner
+#  define vlc_iconv_close (p_symbols)->vlc_iconv_close_inner
+#  define vlc_dgettext (p_symbols)->vlc_dgettext_inner
+#  define __demux2_New (p_symbols)->__demux2_New_inner
+#  define demux2_Delete (p_symbols)->demux2_Delete_inner
+#  define demux2_vaControlHelper (p_symbols)->demux2_vaControlHelper_inner
+#  define vlc_error (p_symbols)->vlc_error_inner
+#  define httpd_HostNew (p_symbols)->httpd_HostNew_inner
+#  define httpd_TLSHostNew (p_symbols)->httpd_TLSHostNew_inner
+#  define httpd_HostDelete (p_symbols)->httpd_HostDelete_inner
+#  define httpd_UrlNew (p_symbols)->httpd_UrlNew_inner
+#  define httpd_UrlNewUnique (p_symbols)->httpd_UrlNewUnique_inner
+#  define httpd_UrlCatch (p_symbols)->httpd_UrlCatch_inner
+#  define httpd_UrlDelete (p_symbols)->httpd_UrlDelete_inner
+#  define httpd_ClientModeStream (p_symbols)->httpd_ClientModeStream_inner
+#  define httpd_ClientModeBidir (p_symbols)->httpd_ClientModeBidir_inner
+#  define httpd_ClientIP (p_symbols)->httpd_ClientIP_inner
+#  define httpd_FileNew (p_symbols)->httpd_FileNew_inner
+#  define httpd_FileDelete (p_symbols)->httpd_FileDelete_inner
+#  define httpd_RedirectNew (p_symbols)->httpd_RedirectNew_inner
+#  define httpd_RedirectDelete (p_symbols)->httpd_RedirectDelete_inner
+#  define httpd_StreamNew (p_symbols)->httpd_StreamNew_inner
+#  define httpd_StreamDelete (p_symbols)->httpd_StreamDelete_inner
+#  define httpd_StreamHeader (p_symbols)->httpd_StreamHeader_inner
+#  define httpd_StreamSend (p_symbols)->httpd_StreamSend_inner
+#  define httpd_MsgInit (p_symbols)->httpd_MsgInit_inner
+#  define httpd_MsgAdd (p_symbols)->httpd_MsgAdd_inner
+#  define httpd_MsgGet (p_symbols)->httpd_MsgGet_inner
+#  define httpd_MsgClean (p_symbols)->httpd_MsgClean_inner
+#  define tls_ServerCreate (p_symbols)->tls_ServerCreate_inner
+#  define tls_ServerDelete (p_symbols)->tls_ServerDelete_inner
+#  define tls_ClientCreate (p_symbols)->tls_ClientCreate_inner
+#  define tls_ClientDelete (p_symbols)->tls_ClientDelete_inner
+#  define __image_HandlerCreate (p_symbols)->__image_HandlerCreate_inner
+#  define image_HandlerDelete (p_symbols)->image_HandlerDelete_inner
+#  define vlc_input_item_GetInfo (p_symbols)->vlc_input_item_GetInfo_inner
+#  define vlc_input_item_AddInfo (p_symbols)->vlc_input_item_AddInfo_inner
+#  define __input_CreateThread (p_symbols)->__input_CreateThread_inner
+#  define __input_Preparse (p_symbols)->__input_Preparse_inner
+#  define input_StopThread (p_symbols)->input_StopThread_inner
+#  define input_DestroyThread (p_symbols)->input_DestroyThread_inner
+#  define input_vaControl (p_symbols)->input_vaControl_inner
+#  define input_Control (p_symbols)->input_Control_inner
+#  define input_DecoderNew (p_symbols)->input_DecoderNew_inner
+#  define input_DecoderDelete (p_symbols)->input_DecoderDelete_inner
+#  define input_DecoderDecode (p_symbols)->input_DecoderDecode_inner
+#  define __intf_Create (p_symbols)->__intf_Create_inner
+#  define intf_RunThread (p_symbols)->intf_RunThread_inner
+#  define intf_StopThread (p_symbols)->intf_StopThread_inner
+#  define intf_Destroy (p_symbols)->intf_Destroy_inner
+#  define __msg_Generic (p_symbols)->__msg_Generic_inner
+#  define __msg_GenericVa (p_symbols)->__msg_GenericVa_inner
+#  define __msg_Info (p_symbols)->__msg_Info_inner
+#  define __msg_Err (p_symbols)->__msg_Err_inner
+#  define __msg_Warn (p_symbols)->__msg_Warn_inner
+#  define __msg_Dbg (p_symbols)->__msg_Dbg_inner
+#  define __msg_Subscribe (p_symbols)->__msg_Subscribe_inner
+#  define __msg_Unsubscribe (p_symbols)->__msg_Unsubscribe_inner
+#  define __vlc_object_create (p_symbols)->__vlc_object_create_inner
+#  define __vlc_object_destroy (p_symbols)->__vlc_object_destroy_inner
+#  define __vlc_object_attach (p_symbols)->__vlc_object_attach_inner
+#  define __vlc_object_detach (p_symbols)->__vlc_object_detach_inner
+#  define __vlc_object_get (p_symbols)->__vlc_object_get_inner
+#  define __vlc_object_find (p_symbols)->__vlc_object_find_inner
+#  define __vlc_object_yield (p_symbols)->__vlc_object_yield_inner
+#  define __vlc_object_release (p_symbols)->__vlc_object_release_inner
+#  define __vlc_list_find (p_symbols)->__vlc_list_find_inner
+#  define vlc_list_release (p_symbols)->vlc_list_release_inner
+#  define playlist_Control (p_symbols)->playlist_Control_inner
+#  define playlist_LockControl (p_symbols)->playlist_LockControl_inner
+#  define playlist_Clear (p_symbols)->playlist_Clear_inner
+#  define playlist_LockClear (p_symbols)->playlist_LockClear_inner
+#  define playlist_PreparseEnqueue (p_symbols)->playlist_PreparseEnqueue_inner
+#  define playlist_ServicesDiscoveryAdd (p_symbols)->playlist_ServicesDiscoveryAdd_inner
+#  define playlist_ServicesDiscoveryRemove (p_symbols)->playlist_ServicesDiscoveryRemove_inner
+#  define playlist_AddSDModules (p_symbols)->playlist_AddSDModules_inner
+#  define playlist_IsServicesDiscoveryLoaded (p_symbols)->playlist_IsServicesDiscoveryLoaded_inner
+#  define __playlist_ItemNew (p_symbols)->__playlist_ItemNew_inner
+#  define __playlist_ItemCopy (p_symbols)->__playlist_ItemCopy_inner
+#  define playlist_ItemNewWithType (p_symbols)->playlist_ItemNewWithType_inner
+#  define playlist_ItemDelete (p_symbols)->playlist_ItemDelete_inner
+#  define playlist_ItemAddParent (p_symbols)->playlist_ItemAddParent_inner
+#  define playlist_CopyParents (p_symbols)->playlist_CopyParents_inner
+#  define playlist_ItemSetName (p_symbols)->playlist_ItemSetName_inner
+#  define playlist_ItemSetDuration (p_symbols)->playlist_ItemSetDuration_inner
+#  define playlist_ViewInsert (p_symbols)->playlist_ViewInsert_inner
+#  define playlist_ViewDelete (p_symbols)->playlist_ViewDelete_inner
+#  define playlist_ViewFind (p_symbols)->playlist_ViewFind_inner
+#  define playlist_ViewUpdate (p_symbols)->playlist_ViewUpdate_inner
+#  define playlist_ViewDump (p_symbols)->playlist_ViewDump_inner
+#  define playlist_ViewEmpty (p_symbols)->playlist_ViewEmpty_inner
+#  define playlist_NodeCreate (p_symbols)->playlist_NodeCreate_inner
+#  define playlist_NodeAppend (p_symbols)->playlist_NodeAppend_inner
+#  define playlist_NodeInsert (p_symbols)->playlist_NodeInsert_inner
+#  define playlist_NodeRemoveItem (p_symbols)->playlist_NodeRemoveItem_inner
+#  define playlist_NodeChildrenCount (p_symbols)->playlist_NodeChildrenCount_inner
+#  define playlist_ChildSearchName (p_symbols)->playlist_ChildSearchName_inner
+#  define playlist_NodeDelete (p_symbols)->playlist_NodeDelete_inner
+#  define playlist_NodeEmpty (p_symbols)->playlist_NodeEmpty_inner
+#  define playlist_Add (p_symbols)->playlist_Add_inner
+#  define playlist_AddExt (p_symbols)->playlist_AddExt_inner
+#  define playlist_ItemAdd (p_symbols)->playlist_ItemAdd_inner
+#  define playlist_NodeAddItem (p_symbols)->playlist_NodeAddItem_inner
+#  define playlist_Delete (p_symbols)->playlist_Delete_inner
+#  define playlist_LockDelete (p_symbols)->playlist_LockDelete_inner
+#  define playlist_Disable (p_symbols)->playlist_Disable_inner
+#  define playlist_Enable (p_symbols)->playlist_Enable_inner
+#  define playlist_ItemToNode (p_symbols)->playlist_ItemToNode_inner
+#  define playlist_LockItemToNode (p_symbols)->playlist_LockItemToNode_inner
+#  define playlist_Replace (p_symbols)->playlist_Replace_inner
+#  define playlist_LockReplace (p_symbols)->playlist_LockReplace_inner
+#  define playlist_ItemGetById (p_symbols)->playlist_ItemGetById_inner
+#  define playlist_LockItemGetById (p_symbols)->playlist_LockItemGetById_inner
+#  define playlist_ItemGetByPos (p_symbols)->playlist_ItemGetByPos_inner
+#  define playlist_LockItemGetByPos (p_symbols)->playlist_LockItemGetByPos_inner
+#  define playlist_ItemGetByInput (p_symbols)->playlist_ItemGetByInput_inner
+#  define playlist_LockItemGetByInput (p_symbols)->playlist_LockItemGetByInput_inner
+#  define playlist_GetPositionById (p_symbols)->playlist_GetPositionById_inner
+#  define playlist_ItemAddOption (p_symbols)->playlist_ItemAddOption_inner
+#  define playlist_Sort (p_symbols)->playlist_Sort_inner
+#  define playlist_Move (p_symbols)->playlist_Move_inner
+#  define playlist_NodeGroup (p_symbols)->playlist_NodeGroup_inner
+#  define playlist_NodeSort (p_symbols)->playlist_NodeSort_inner
+#  define playlist_RecursiveNodeSort (p_symbols)->playlist_RecursiveNodeSort_inner
+#  define playlist_Import (p_symbols)->playlist_Import_inner
+#  define playlist_Export (p_symbols)->playlist_Export_inner
+#  define __spu_Create (p_symbols)->__spu_Create_inner
+#  define spu_Init (p_symbols)->spu_Init_inner
+#  define spu_Destroy (p_symbols)->spu_Destroy_inner
+#  define spu_CreateSubpicture (p_symbols)->spu_CreateSubpicture_inner
+#  define spu_DestroySubpicture (p_symbols)->spu_DestroySubpicture_inner
+#  define spu_DisplaySubpicture (p_symbols)->spu_DisplaySubpicture_inner
+#  define __spu_CreateRegion (p_symbols)->__spu_CreateRegion_inner
+#  define __spu_MakeRegion (p_symbols)->__spu_MakeRegion_inner
+#  define __spu_DestroyRegion (p_symbols)->__spu_DestroyRegion_inner
+#  define spu_SortSubpictures (p_symbols)->spu_SortSubpictures_inner
+#  define spu_RenderSubpictures (p_symbols)->spu_RenderSubpictures_inner
+#  define stream_ReadLine (p_symbols)->stream_ReadLine_inner
+#  define __stream_DemuxNew (p_symbols)->__stream_DemuxNew_inner
+#  define stream_DemuxSend (p_symbols)->stream_DemuxSend_inner
+#  define stream_DemuxDelete (p_symbols)->stream_DemuxDelete_inner
+#  define __stream_MemoryNew (p_symbols)->__stream_MemoryNew_inner
+#  define __stream_UrlNew (p_symbols)->__stream_UrlNew_inner
+#  define __vlc_threads_init (p_symbols)->__vlc_threads_init_inner
+#  define __vlc_threads_end (p_symbols)->__vlc_threads_end_inner
+#  define __vlc_mutex_init (p_symbols)->__vlc_mutex_init_inner
+#  define __vlc_mutex_destroy (p_symbols)->__vlc_mutex_destroy_inner
+#  define __vlc_cond_init (p_symbols)->__vlc_cond_init_inner
+#  define __vlc_cond_destroy (p_symbols)->__vlc_cond_destroy_inner
+#  define __vlc_thread_create (p_symbols)->__vlc_thread_create_inner
+#  define __vlc_thread_set_priority (p_symbols)->__vlc_thread_set_priority_inner
+#  define __vlc_thread_ready (p_symbols)->__vlc_thread_ready_inner
+#  define __vlc_thread_join (p_symbols)->__vlc_thread_join_inner
+#  define __vout_CopyPicture (p_symbols)->__vout_CopyPicture_inner
+#  define __vout_InitPicture (p_symbols)->__vout_InitPicture_inner
+#  define __vout_AllocatePicture (p_symbols)->__vout_AllocatePicture_inner
+#  define __vlm_New (p_symbols)->__vlm_New_inner
+#  define vlm_Delete (p_symbols)->vlm_Delete_inner
+#  define vlm_ExecuteCommand (p_symbols)->vlm_ExecuteCommand_inner
+#  define vlm_MessageDelete (p_symbols)->vlm_MessageDelete_inner
+#  define vlm_MediaNew (p_symbols)->vlm_MediaNew_inner
+#  define vlm_MediaDelete (p_symbols)->vlm_MediaDelete_inner
+#  define vlm_MediaSetup (p_symbols)->vlm_MediaSetup_inner
+#  define vlm_MediaControl (p_symbols)->vlm_MediaControl_inner
+#  define vlm_ScheduleNew (p_symbols)->vlm_ScheduleNew_inner
+#  define vlm_ScheduleDelete (p_symbols)->vlm_ScheduleDelete_inner
+#  define vlm_ScheduleSetup (p_symbols)->vlm_ScheduleSetup_inner
+#  define vlm_MediaVodControl (p_symbols)->vlm_MediaVodControl_inner
+#  define vlm_Save (p_symbols)->vlm_Save_inner
+#  define vlm_Load (p_symbols)->vlm_Load_inner
+#  define __xml_Create (p_symbols)->__xml_Create_inner
+#  define xml_Delete (p_symbols)->xml_Delete_inner
+#  define __vout_SynchroInit (p_symbols)->__vout_SynchroInit_inner
+#  define vout_SynchroRelease (p_symbols)->vout_SynchroRelease_inner
+#  define vout_SynchroReset (p_symbols)->vout_SynchroReset_inner
+#  define vout_SynchroChoose (p_symbols)->vout_SynchroChoose_inner
+#  define vout_SynchroTrash (p_symbols)->vout_SynchroTrash_inner
+#  define vout_SynchroDecode (p_symbols)->vout_SynchroDecode_inner
+#  define vout_SynchroEnd (p_symbols)->vout_SynchroEnd_inner
+#  define vout_SynchroDate (p_symbols)->vout_SynchroDate_inner
+#  define vout_SynchroNewPicture (p_symbols)->vout_SynchroNewPicture_inner
+#  define vlc_getaddrinfo (p_symbols)->vlc_getaddrinfo_inner
+#  define vlc_getnameinfo (p_symbols)->vlc_getnameinfo_inner
+#  define InitMD5 (p_symbols)->InitMD5_inner
+#  define EndMD5 (p_symbols)->EndMD5_inner
+#  define vlc_freeaddrinfo (p_symbols)->vlc_freeaddrinfo_inner
+#  define AddMD5 (p_symbols)->AddMD5_inner
+#  define vlc_gai_strerror (p_symbols)->vlc_gai_strerror_inner
+#  define net_ListenClose (p_symbols)->net_ListenClose_inner
+#  define DigestMD5 (p_symbols)->DigestMD5_inner
+# elif defined (HAVE_DYNAMIC_PLUGINS) && !defined (__BUILTIN__)
+/******************************************************************
+ * STORE_SYMBOLS: store VLC APIs into p_symbols for plugin access.
+ ******************************************************************/
+#  define STORE_SYMBOLS( p_symbols ) \
+    ((p_symbols)->aout_FiltersCreatePipeline_inner) = aout_FiltersCreatePipeline; \
+    ((p_symbols)->aout_FiltersDestroyPipeline_inner) = aout_FiltersDestroyPipeline; \
+    ((p_symbols)->aout_FiltersPlay_inner) = aout_FiltersPlay; \
+    ((p_symbols)->aout_OutputNextBuffer_inner) = aout_OutputNextBuffer; \
+    ((p_symbols)->aout_FormatNbChannels_inner) = aout_FormatNbChannels; \
+    ((p_symbols)->aout_FormatPrepare_inner) = aout_FormatPrepare; \
+    ((p_symbols)->aout_FormatPrint_inner) = aout_FormatPrint; \
+    ((p_symbols)->aout_FormatsPrint_inner) = aout_FormatsPrint; \
+    ((p_symbols)->aout_FormatPrintChannels_inner) = aout_FormatPrintChannels; \
+    ((p_symbols)->aout_FifoPop_inner) = aout_FifoPop; \
+    ((p_symbols)->aout_FifoFirstDate_inner) = aout_FifoFirstDate; \
+    ((p_symbols)->aout_VolumeSoftInit_inner) = aout_VolumeSoftInit; \
+    ((p_symbols)->aout_VolumeNoneInit_inner) = aout_VolumeNoneInit; \
+    ((p_symbols)->__aout_New_inner) = __aout_New; \
+    ((p_symbols)->aout_Delete_inner) = aout_Delete; \
+    ((p_symbols)->aout_DateInit_inner) = aout_DateInit; \
+    ((p_symbols)->aout_DateSet_inner) = aout_DateSet; \
+    ((p_symbols)->aout_DateMove_inner) = aout_DateMove; \
+    ((p_symbols)->aout_DateGet_inner) = aout_DateGet; \
+    ((p_symbols)->aout_DateIncrement_inner) = aout_DateIncrement; \
+    ((p_symbols)->aout_CheckChannelReorder_inner) = aout_CheckChannelReorder; \
+    ((p_symbols)->aout_ChannelReorder_inner) = aout_ChannelReorder; \
+    ((p_symbols)->__aout_DecNew_inner) = __aout_DecNew; \
+    ((p_symbols)->aout_DecDelete_inner) = aout_DecDelete; \
+    ((p_symbols)->aout_DecNewBuffer_inner) = aout_DecNewBuffer; \
+    ((p_symbols)->aout_DecDeleteBuffer_inner) = aout_DecDeleteBuffer; \
+    ((p_symbols)->aout_DecPlay_inner) = aout_DecPlay; \
+    ((p_symbols)->__aout_VolumeGet_inner) = __aout_VolumeGet; \
+    ((p_symbols)->__aout_VolumeSet_inner) = __aout_VolumeSet; \
+    ((p_symbols)->__aout_VolumeInfos_inner) = __aout_VolumeInfos; \
+    ((p_symbols)->__aout_VolumeUp_inner) = __aout_VolumeUp; \
+    ((p_symbols)->__aout_VolumeDown_inner) = __aout_VolumeDown; \
+    ((p_symbols)->__aout_VolumeMute_inner) = __aout_VolumeMute; \
+    ((p_symbols)->aout_Restart_inner) = aout_Restart; \
+    ((p_symbols)->aout_FindAndRestart_inner) = aout_FindAndRestart; \
+    ((p_symbols)->aout_ChannelsRestart_inner) = aout_ChannelsRestart; \
+    ((p_symbols)->vlc_current_charset_inner) = vlc_current_charset; \
+    ((p_symbols)->__config_GetType_inner) = __config_GetType; \
+    ((p_symbols)->__config_GetInt_inner) = __config_GetInt; \
+    ((p_symbols)->__config_PutInt_inner) = __config_PutInt; \
+    ((p_symbols)->__config_GetFloat_inner) = __config_GetFloat; \
+    ((p_symbols)->__config_PutFloat_inner) = __config_PutFloat; \
+    ((p_symbols)->__config_GetPsz_inner) = __config_GetPsz; \
+    ((p_symbols)->__config_PutPsz_inner) = __config_PutPsz; \
+    ((p_symbols)->__config_LoadCmdLine_inner) = __config_LoadCmdLine; \
+    ((p_symbols)->config_GetHomeDir_inner) = config_GetHomeDir; \
+    ((p_symbols)->__config_LoadConfigFile_inner) = __config_LoadConfigFile; \
+    ((p_symbols)->__config_SaveConfigFile_inner) = __config_SaveConfigFile; \
+    ((p_symbols)->__config_ResetAll_inner) = __config_ResetAll; \
+    ((p_symbols)->config_FindConfig_inner) = config_FindConfig; \
+    ((p_symbols)->config_FindModule_inner) = config_FindModule; \
+    ((p_symbols)->config_Duplicate_inner) = config_Duplicate; \
+    ((p_symbols)->config_SetCallbacks_inner) = config_SetCallbacks; \
+    ((p_symbols)->config_UnsetCallbacks_inner) = config_UnsetCallbacks; \
+    ((p_symbols)->__intf_Eject_inner) = __intf_Eject; \
+    ((p_symbols)->GetLang_1_inner) = GetLang_1; \
+    ((p_symbols)->GetLang_2T_inner) = GetLang_2T; \
+    ((p_symbols)->GetLang_2B_inner) = GetLang_2B; \
+    ((p_symbols)->DecodeLanguage_inner) = DecodeLanguage; \
+    ((p_symbols)->__module_Need_inner) = __module_Need; \
+    ((p_symbols)->__module_Unneed_inner) = __module_Unneed; \
+    ((p_symbols)->mstrtime_inner) = mstrtime; \
+    ((p_symbols)->mdate_inner) = mdate; \
+    ((p_symbols)->mwait_inner) = mwait; \
+    ((p_symbols)->msleep_inner) = msleep; \
+    ((p_symbols)->secstotimestr_inner) = secstotimestr; \
+    ((p_symbols)->date_Init_inner) = date_Init; \
+    ((p_symbols)->date_Change_inner) = date_Change; \
+    ((p_symbols)->date_Set_inner) = date_Set; \
+    ((p_symbols)->date_Get_inner) = date_Get; \
+    ((p_symbols)->date_Move_inner) = date_Move; \
+    ((p_symbols)->date_Increment_inner) = date_Increment; \
+    ((p_symbols)->__net_OpenTCP_inner) = __net_OpenTCP; \
+    ((p_symbols)->__net_ListenTCP_inner) = __net_ListenTCP; \
+    ((p_symbols)->__net_Accept_inner) = __net_Accept; \
+    ((p_symbols)->__net_OpenUDP_inner) = __net_OpenUDP; \
+    ((p_symbols)->net_Close_inner) = net_Close; \
+    ((p_symbols)->__net_Read_inner) = __net_Read; \
+    ((p_symbols)->__net_ReadNonBlock_inner) = __net_ReadNonBlock; \
+    ((p_symbols)->__net_Select_inner) = __net_Select; \
+    ((p_symbols)->__net_Write_inner) = __net_Write; \
+    ((p_symbols)->__net_Gets_inner) = __net_Gets; \
+    ((p_symbols)->net_Printf_inner) = net_Printf; \
+    ((p_symbols)->__net_vaPrintf_inner) = __net_vaPrintf; \
+    ((p_symbols)->vout_ShowTextRelative_inner) = vout_ShowTextRelative; \
+    ((p_symbols)->vout_ShowTextAbsolute_inner) = vout_ShowTextAbsolute; \
+    ((p_symbols)->__vout_OSDMessage_inner) = __vout_OSDMessage; \
+    ((p_symbols)->vout_OSDSlider_inner) = vout_OSDSlider; \
+    ((p_symbols)->vout_OSDIcon_inner) = vout_OSDIcon; \
+    ((p_symbols)->__sout_CfgParse_inner) = __sout_CfgParse; \
+    ((p_symbols)->sout_CfgCreate_inner) = sout_CfgCreate; \
+    ((p_symbols)->__sout_NewInstance_inner) = __sout_NewInstance; \
+    ((p_symbols)->sout_DeleteInstance_inner) = sout_DeleteInstance; \
+    ((p_symbols)->sout_InputNew_inner) = sout_InputNew; \
+    ((p_symbols)->sout_InputDelete_inner) = sout_InputDelete; \
+    ((p_symbols)->sout_InputSendBuffer_inner) = sout_InputSendBuffer; \
+    ((p_symbols)->sout_AccessOutNew_inner) = sout_AccessOutNew; \
+    ((p_symbols)->sout_AccessOutDelete_inner) = sout_AccessOutDelete; \
+    ((p_symbols)->sout_AccessOutSeek_inner) = sout_AccessOutSeek; \
+    ((p_symbols)->sout_AccessOutRead_inner) = sout_AccessOutRead; \
+    ((p_symbols)->sout_AccessOutWrite_inner) = sout_AccessOutWrite; \
+    ((p_symbols)->sout_MuxNew_inner) = sout_MuxNew; \
+    ((p_symbols)->sout_MuxAddStream_inner) = sout_MuxAddStream; \
+    ((p_symbols)->sout_MuxDeleteStream_inner) = sout_MuxDeleteStream; \
+    ((p_symbols)->sout_MuxDelete_inner) = sout_MuxDelete; \
+    ((p_symbols)->sout_MuxSendBuffer_inner) = sout_MuxSendBuffer; \
+    ((p_symbols)->sout_StreamNew_inner) = sout_StreamNew; \
+    ((p_symbols)->sout_StreamDelete_inner) = sout_StreamDelete; \
+    ((p_symbols)->sout_AnnounceRegister_inner) = sout_AnnounceRegister; \
+    ((p_symbols)->sout_AnnounceRegisterSDP_inner) = sout_AnnounceRegisterSDP; \
+    ((p_symbols)->sout_AnnounceUnRegister_inner) = sout_AnnounceUnRegister; \
+    ((p_symbols)->sout_AnnounceSessionDestroy_inner) = sout_AnnounceSessionDestroy; \
+    ((p_symbols)->sout_AnnounceMethodCreate_inner) = sout_AnnounceMethodCreate; \
+    ((p_symbols)->__var_Create_inner) = __var_Create; \
+    ((p_symbols)->__var_Destroy_inner) = __var_Destroy; \
+    ((p_symbols)->__var_Change_inner) = __var_Change; \
+    ((p_symbols)->__var_Type_inner) = __var_Type; \
+    ((p_symbols)->__var_Set_inner) = __var_Set; \
+    ((p_symbols)->__var_Get_inner) = __var_Get; \
+    ((p_symbols)->__var_AddCallback_inner) = __var_AddCallback; \
+    ((p_symbols)->__var_DelCallback_inner) = __var_DelCallback; \
+    ((p_symbols)->__vout_Request_inner) = __vout_Request; \
+    ((p_symbols)->__vout_Create_inner) = __vout_Create; \
+    ((p_symbols)->vout_Destroy_inner) = vout_Destroy; \
+    ((p_symbols)->vout_VarCallback_inner) = vout_VarCallback; \
+    ((p_symbols)->vout_ChromaCmp_inner) = vout_ChromaCmp; \
+    ((p_symbols)->vout_CreatePicture_inner) = vout_CreatePicture; \
+    ((p_symbols)->vout_InitFormat_inner) = vout_InitFormat; \
+    ((p_symbols)->vout_DestroyPicture_inner) = vout_DestroyPicture; \
+    ((p_symbols)->vout_DisplayPicture_inner) = vout_DisplayPicture; \
+    ((p_symbols)->vout_DatePicture_inner) = vout_DatePicture; \
+    ((p_symbols)->vout_LinkPicture_inner) = vout_LinkPicture; \
+    ((p_symbols)->vout_UnlinkPicture_inner) = vout_UnlinkPicture; \
+    ((p_symbols)->vout_PlacePicture_inner) = vout_PlacePicture; \
+    ((p_symbols)->vout_vaControlDefault_inner) = vout_vaControlDefault; \
+    ((p_symbols)->vout_RequestWindow_inner) = vout_RequestWindow; \
+    ((p_symbols)->vout_ReleaseWindow_inner) = vout_ReleaseWindow; \
+    ((p_symbols)->vout_ControlWindow_inner) = vout_ControlWindow; \
+    ((p_symbols)->__access2_New_inner) = __access2_New; \
+    ((p_symbols)->access2_FilterNew_inner) = access2_FilterNew; \
+    ((p_symbols)->access2_Delete_inner) = access2_Delete; \
+    ((p_symbols)->__block_New_inner) = __block_New; \
+    ((p_symbols)->block_Realloc_inner) = block_Realloc; \
+    ((p_symbols)->__block_FifoNew_inner) = __block_FifoNew; \
+    ((p_symbols)->block_FifoRelease_inner) = block_FifoRelease; \
+    ((p_symbols)->block_FifoEmpty_inner) = block_FifoEmpty; \
+    ((p_symbols)->block_FifoPut_inner) = block_FifoPut; \
+    ((p_symbols)->block_FifoGet_inner) = block_FifoGet; \
+    ((p_symbols)->block_FifoShow_inner) = block_FifoShow; \
+    ((p_symbols)->vlc_strdup_inner) = vlc_strdup; \
+    ((p_symbols)->vlc_vasprintf_inner) = vlc_vasprintf; \
+    ((p_symbols)->vlc_asprintf_inner) = vlc_asprintf; \
+    ((p_symbols)->vlc_strndup_inner) = vlc_strndup; \
+    ((p_symbols)->vlc_atof_inner) = vlc_atof; \
+    ((p_symbols)->vlc_atoll_inner) = vlc_atoll; \
+    ((p_symbols)->vlc_strtoll_inner) = vlc_strtoll; \
+    ((p_symbols)->vlc_getenv_inner) = vlc_getenv; \
+    ((p_symbols)->vlc_strcasecmp_inner) = vlc_strcasecmp; \
+    ((p_symbols)->vlc_strncasecmp_inner) = vlc_strncasecmp; \
+    ((p_symbols)->vlc_strcasestr_inner) = vlc_strcasestr; \
+    ((p_symbols)->vlc_opendir_inner) = vlc_opendir; \
+    ((p_symbols)->vlc_readdir_inner) = vlc_readdir; \
+    ((p_symbols)->vlc_closedir_inner) = vlc_closedir; \
+    ((p_symbols)->vlc_reduce_inner) = vlc_reduce; \
+    ((p_symbols)->vlc_parse_cmdline_inner) = vlc_parse_cmdline; \
+    ((p_symbols)->vlc_wraptext_inner) = vlc_wraptext; \
+    ((p_symbols)->vlc_iconv_open_inner) = vlc_iconv_open; \
+    ((p_symbols)->vlc_iconv_inner) = vlc_iconv; \
+    ((p_symbols)->vlc_iconv_close_inner) = vlc_iconv_close; \
+    ((p_symbols)->vlc_dgettext_inner) = vlc_dgettext; \
+    ((p_symbols)->__demux2_New_inner) = __demux2_New; \
+    ((p_symbols)->demux2_Delete_inner) = demux2_Delete; \
+    ((p_symbols)->demux2_vaControlHelper_inner) = demux2_vaControlHelper; \
+    ((p_symbols)->vlc_error_inner) = vlc_error; \
+    ((p_symbols)->httpd_HostNew_inner) = httpd_HostNew; \
+    ((p_symbols)->httpd_TLSHostNew_inner) = httpd_TLSHostNew; \
+    ((p_symbols)->httpd_HostDelete_inner) = httpd_HostDelete; \
+    ((p_symbols)->httpd_UrlNew_inner) = httpd_UrlNew; \
+    ((p_symbols)->httpd_UrlNewUnique_inner) = httpd_UrlNewUnique; \
+    ((p_symbols)->httpd_UrlCatch_inner) = httpd_UrlCatch; \
+    ((p_symbols)->httpd_UrlDelete_inner) = httpd_UrlDelete; \
+    ((p_symbols)->httpd_ClientModeStream_inner) = httpd_ClientModeStream; \
+    ((p_symbols)->httpd_ClientModeBidir_inner) = httpd_ClientModeBidir; \
+    ((p_symbols)->httpd_ClientIP_inner) = httpd_ClientIP; \
+    ((p_symbols)->httpd_FileNew_inner) = httpd_FileNew; \
+    ((p_symbols)->httpd_FileDelete_inner) = httpd_FileDelete; \
+    ((p_symbols)->httpd_RedirectNew_inner) = httpd_RedirectNew; \
+    ((p_symbols)->httpd_RedirectDelete_inner) = httpd_RedirectDelete; \
+    ((p_symbols)->httpd_StreamNew_inner) = httpd_StreamNew; \
+    ((p_symbols)->httpd_StreamDelete_inner) = httpd_StreamDelete; \
+    ((p_symbols)->httpd_StreamHeader_inner) = httpd_StreamHeader; \
+    ((p_symbols)->httpd_StreamSend_inner) = httpd_StreamSend; \
+    ((p_symbols)->httpd_MsgInit_inner) = httpd_MsgInit; \
+    ((p_symbols)->httpd_MsgAdd_inner) = httpd_MsgAdd; \
+    ((p_symbols)->httpd_MsgGet_inner) = httpd_MsgGet; \
+    ((p_symbols)->httpd_MsgClean_inner) = httpd_MsgClean; \
+    ((p_symbols)->tls_ServerCreate_inner) = tls_ServerCreate; \
+    ((p_symbols)->tls_ServerDelete_inner) = tls_ServerDelete; \
+    ((p_symbols)->tls_ClientCreate_inner) = tls_ClientCreate; \
+    ((p_symbols)->tls_ClientDelete_inner) = tls_ClientDelete; \
+    ((p_symbols)->__image_HandlerCreate_inner) = __image_HandlerCreate; \
+    ((p_symbols)->image_HandlerDelete_inner) = image_HandlerDelete; \
+    ((p_symbols)->vlc_input_item_GetInfo_inner) = vlc_input_item_GetInfo; \
+    ((p_symbols)->vlc_input_item_AddInfo_inner) = vlc_input_item_AddInfo; \
+    ((p_symbols)->__input_CreateThread_inner) = __input_CreateThread; \
+    ((p_symbols)->__input_Preparse_inner) = __input_Preparse; \
+    ((p_symbols)->input_StopThread_inner) = input_StopThread; \
+    ((p_symbols)->input_DestroyThread_inner) = input_DestroyThread; \
+    ((p_symbols)->input_vaControl_inner) = input_vaControl; \
+    ((p_symbols)->input_Control_inner) = input_Control; \
+    ((p_symbols)->input_DecoderNew_inner) = input_DecoderNew; \
+    ((p_symbols)->input_DecoderDelete_inner) = input_DecoderDelete; \
+    ((p_symbols)->input_DecoderDecode_inner) = input_DecoderDecode; \
+    ((p_symbols)->__intf_Create_inner) = __intf_Create; \
+    ((p_symbols)->intf_RunThread_inner) = intf_RunThread; \
+    ((p_symbols)->intf_StopThread_inner) = intf_StopThread; \
+    ((p_symbols)->intf_Destroy_inner) = intf_Destroy; \
+    ((p_symbols)->__msg_Generic_inner) = __msg_Generic; \
+    ((p_symbols)->__msg_GenericVa_inner) = __msg_GenericVa; \
+    ((p_symbols)->__msg_Info_inner) = __msg_Info; \
+    ((p_symbols)->__msg_Err_inner) = __msg_Err; \
+    ((p_symbols)->__msg_Warn_inner) = __msg_Warn; \
+    ((p_symbols)->__msg_Dbg_inner) = __msg_Dbg; \
+    ((p_symbols)->__msg_Subscribe_inner) = __msg_Subscribe; \
+    ((p_symbols)->__msg_Unsubscribe_inner) = __msg_Unsubscribe; \
+    ((p_symbols)->__vlc_object_create_inner) = __vlc_object_create; \
+    ((p_symbols)->__vlc_object_destroy_inner) = __vlc_object_destroy; \
+    ((p_symbols)->__vlc_object_attach_inner) = __vlc_object_attach; \
+    ((p_symbols)->__vlc_object_detach_inner) = __vlc_object_detach; \
+    ((p_symbols)->__vlc_object_get_inner) = __vlc_object_get; \
+    ((p_symbols)->__vlc_object_find_inner) = __vlc_object_find; \
+    ((p_symbols)->__vlc_object_yield_inner) = __vlc_object_yield; \
+    ((p_symbols)->__vlc_object_release_inner) = __vlc_object_release; \
+    ((p_symbols)->__vlc_list_find_inner) = __vlc_list_find; \
+    ((p_symbols)->vlc_list_release_inner) = vlc_list_release; \
+    ((p_symbols)->playlist_Control_inner) = playlist_Control; \
+    ((p_symbols)->playlist_LockControl_inner) = playlist_LockControl; \
+    ((p_symbols)->playlist_Clear_inner) = playlist_Clear; \
+    ((p_symbols)->playlist_LockClear_inner) = playlist_LockClear; \
+    ((p_symbols)->playlist_PreparseEnqueue_inner) = playlist_PreparseEnqueue; \
+    ((p_symbols)->playlist_ServicesDiscoveryAdd_inner) = playlist_ServicesDiscoveryAdd; \
+    ((p_symbols)->playlist_ServicesDiscoveryRemove_inner) = playlist_ServicesDiscoveryRemove; \
+    ((p_symbols)->playlist_AddSDModules_inner) = playlist_AddSDModules; \
+    ((p_symbols)->playlist_IsServicesDiscoveryLoaded_inner) = playlist_IsServicesDiscoveryLoaded; \
+    ((p_symbols)->__playlist_ItemNew_inner) = __playlist_ItemNew; \
+    ((p_symbols)->__playlist_ItemCopy_inner) = __playlist_ItemCopy; \
+    ((p_symbols)->playlist_ItemNewWithType_inner) = playlist_ItemNewWithType; \
+    ((p_symbols)->playlist_ItemDelete_inner) = playlist_ItemDelete; \
+    ((p_symbols)->playlist_ItemAddParent_inner) = playlist_ItemAddParent; \
+    ((p_symbols)->playlist_CopyParents_inner) = playlist_CopyParents; \
+    ((p_symbols)->playlist_ItemSetName_inner) = playlist_ItemSetName; \
+    ((p_symbols)->playlist_ItemSetDuration_inner) = playlist_ItemSetDuration; \
+    ((p_symbols)->playlist_ViewInsert_inner) = playlist_ViewInsert; \
+    ((p_symbols)->playlist_ViewDelete_inner) = playlist_ViewDelete; \
+    ((p_symbols)->playlist_ViewFind_inner) = playlist_ViewFind; \
+    ((p_symbols)->playlist_ViewUpdate_inner) = playlist_ViewUpdate; \
+    ((p_symbols)->playlist_ViewDump_inner) = playlist_ViewDump; \
+    ((p_symbols)->playlist_ViewEmpty_inner) = playlist_ViewEmpty; \
+    ((p_symbols)->playlist_NodeCreate_inner) = playlist_NodeCreate; \
+    ((p_symbols)->playlist_NodeAppend_inner) = playlist_NodeAppend; \
+    ((p_symbols)->playlist_NodeInsert_inner) = playlist_NodeInsert; \
+    ((p_symbols)->playlist_NodeRemoveItem_inner) = playlist_NodeRemoveItem; \
+    ((p_symbols)->playlist_NodeChildrenCount_inner) = playlist_NodeChildrenCount; \
+    ((p_symbols)->playlist_ChildSearchName_inner) = playlist_ChildSearchName; \
+    ((p_symbols)->playlist_NodeDelete_inner) = playlist_NodeDelete; \
+    ((p_symbols)->playlist_NodeEmpty_inner) = playlist_NodeEmpty; \
+    ((p_symbols)->playlist_Add_inner) = playlist_Add; \
+    ((p_symbols)->playlist_AddExt_inner) = playlist_AddExt; \
+    ((p_symbols)->playlist_ItemAdd_inner) = playlist_ItemAdd; \
+    ((p_symbols)->playlist_NodeAddItem_inner) = playlist_NodeAddItem; \
+    ((p_symbols)->playlist_Delete_inner) = playlist_Delete; \
+    ((p_symbols)->playlist_LockDelete_inner) = playlist_LockDelete; \
+    ((p_symbols)->playlist_Disable_inner) = playlist_Disable; \
+    ((p_symbols)->playlist_Enable_inner) = playlist_Enable; \
+    ((p_symbols)->playlist_ItemToNode_inner) = playlist_ItemToNode; \
+    ((p_symbols)->playlist_LockItemToNode_inner) = playlist_LockItemToNode; \
+    ((p_symbols)->playlist_Replace_inner) = playlist_Replace; \
+    ((p_symbols)->playlist_LockReplace_inner) = playlist_LockReplace; \
+    ((p_symbols)->playlist_ItemGetById_inner) = playlist_ItemGetById; \
+    ((p_symbols)->playlist_LockItemGetById_inner) = playlist_LockItemGetById; \
+    ((p_symbols)->playlist_ItemGetByPos_inner) = playlist_ItemGetByPos; \
+    ((p_symbols)->playlist_LockItemGetByPos_inner) = playlist_LockItemGetByPos; \
+    ((p_symbols)->playlist_ItemGetByInput_inner) = playlist_ItemGetByInput; \
+    ((p_symbols)->playlist_LockItemGetByInput_inner) = playlist_LockItemGetByInput; \
+    ((p_symbols)->playlist_GetPositionById_inner) = playlist_GetPositionById; \
+    ((p_symbols)->playlist_ItemAddOption_inner) = playlist_ItemAddOption; \
+    ((p_symbols)->playlist_Sort_inner) = playlist_Sort; \
+    ((p_symbols)->playlist_Move_inner) = playlist_Move; \
+    ((p_symbols)->playlist_NodeGroup_inner) = playlist_NodeGroup; \
+    ((p_symbols)->playlist_NodeSort_inner) = playlist_NodeSort; \
+    ((p_symbols)->playlist_RecursiveNodeSort_inner) = playlist_RecursiveNodeSort; \
+    ((p_symbols)->playlist_Import_inner) = playlist_Import; \
+    ((p_symbols)->playlist_Export_inner) = playlist_Export; \
+    ((p_symbols)->__spu_Create_inner) = __spu_Create; \
+    ((p_symbols)->spu_Init_inner) = spu_Init; \
+    ((p_symbols)->spu_Destroy_inner) = spu_Destroy; \
+    ((p_symbols)->spu_CreateSubpicture_inner) = spu_CreateSubpicture; \
+    ((p_symbols)->spu_DestroySubpicture_inner) = spu_DestroySubpicture; \
+    ((p_symbols)->spu_DisplaySubpicture_inner) = spu_DisplaySubpicture; \
+    ((p_symbols)->__spu_CreateRegion_inner) = __spu_CreateRegion; \
+    ((p_symbols)->__spu_MakeRegion_inner) = __spu_MakeRegion; \
+    ((p_symbols)->__spu_DestroyRegion_inner) = __spu_DestroyRegion; \
+    ((p_symbols)->spu_SortSubpictures_inner) = spu_SortSubpictures; \
+    ((p_symbols)->spu_RenderSubpictures_inner) = spu_RenderSubpictures; \
+    ((p_symbols)->stream_ReadLine_inner) = stream_ReadLine; \
+    ((p_symbols)->__stream_DemuxNew_inner) = __stream_DemuxNew; \
+    ((p_symbols)->stream_DemuxSend_inner) = stream_DemuxSend; \
+    ((p_symbols)->stream_DemuxDelete_inner) = stream_DemuxDelete; \
+    ((p_symbols)->__stream_MemoryNew_inner) = __stream_MemoryNew; \
+    ((p_symbols)->__stream_UrlNew_inner) = __stream_UrlNew; \
+    ((p_symbols)->__vlc_threads_init_inner) = __vlc_threads_init; \
+    ((p_symbols)->__vlc_threads_end_inner) = __vlc_threads_end; \
+    ((p_symbols)->__vlc_mutex_init_inner) = __vlc_mutex_init; \
+    ((p_symbols)->__vlc_mutex_destroy_inner) = __vlc_mutex_destroy; \
+    ((p_symbols)->__vlc_cond_init_inner) = __vlc_cond_init; \
+    ((p_symbols)->__vlc_cond_destroy_inner) = __vlc_cond_destroy; \
+    ((p_symbols)->__vlc_thread_create_inner) = __vlc_thread_create; \
+    ((p_symbols)->__vlc_thread_set_priority_inner) = __vlc_thread_set_priority; \
+    ((p_symbols)->__vlc_thread_ready_inner) = __vlc_thread_ready; \
+    ((p_symbols)->__vlc_thread_join_inner) = __vlc_thread_join; \
+    ((p_symbols)->__vout_CopyPicture_inner) = __vout_CopyPicture; \
+    ((p_symbols)->__vout_InitPicture_inner) = __vout_InitPicture; \
+    ((p_symbols)->__vout_AllocatePicture_inner) = __vout_AllocatePicture; \
+    ((p_symbols)->__vlm_New_inner) = __vlm_New; \
+    ((p_symbols)->vlm_Delete_inner) = vlm_Delete; \
+    ((p_symbols)->vlm_ExecuteCommand_inner) = vlm_ExecuteCommand; \
+    ((p_symbols)->vlm_MessageDelete_inner) = vlm_MessageDelete; \
+    ((p_symbols)->vlm_MediaNew_inner) = vlm_MediaNew; \
+    ((p_symbols)->vlm_MediaDelete_inner) = vlm_MediaDelete; \
+    ((p_symbols)->vlm_MediaSetup_inner) = vlm_MediaSetup; \
+    ((p_symbols)->vlm_MediaControl_inner) = vlm_MediaControl; \
+    ((p_symbols)->vlm_ScheduleNew_inner) = vlm_ScheduleNew; \
+    ((p_symbols)->vlm_ScheduleDelete_inner) = vlm_ScheduleDelete; \
+    ((p_symbols)->vlm_ScheduleSetup_inner) = vlm_ScheduleSetup; \
+    ((p_symbols)->vlm_MediaVodControl_inner) = vlm_MediaVodControl; \
+    ((p_symbols)->vlm_Save_inner) = vlm_Save; \
+    ((p_symbols)->vlm_Load_inner) = vlm_Load; \
+    ((p_symbols)->__xml_Create_inner) = __xml_Create; \
+    ((p_symbols)->xml_Delete_inner) = xml_Delete; \
+    ((p_symbols)->__vout_SynchroInit_inner) = __vout_SynchroInit; \
+    ((p_symbols)->vout_SynchroRelease_inner) = vout_SynchroRelease; \
+    ((p_symbols)->vout_SynchroReset_inner) = vout_SynchroReset; \
+    ((p_symbols)->vout_SynchroChoose_inner) = vout_SynchroChoose; \
+    ((p_symbols)->vout_SynchroTrash_inner) = vout_SynchroTrash; \
+    ((p_symbols)->vout_SynchroDecode_inner) = vout_SynchroDecode; \
+    ((p_symbols)->vout_SynchroEnd_inner) = vout_SynchroEnd; \
+    ((p_symbols)->vout_SynchroDate_inner) = vout_SynchroDate; \
+    ((p_symbols)->vout_SynchroNewPicture_inner) = vout_SynchroNewPicture; \
+    ((p_symbols)->vlc_getaddrinfo_inner) = vlc_getaddrinfo; \
+    ((p_symbols)->vlc_getnameinfo_inner) = vlc_getnameinfo; \
+    ((p_symbols)->InitMD5_inner) = InitMD5; \
+    ((p_symbols)->EndMD5_inner) = EndMD5; \
+    ((p_symbols)->vlc_freeaddrinfo_inner) = vlc_freeaddrinfo; \
+    ((p_symbols)->AddMD5_inner) = AddMD5; \
+    ((p_symbols)->vlc_gai_strerror_inner) = vlc_gai_strerror; \
+    ((p_symbols)->net_ListenClose_inner) = net_ListenClose; \
+    ((p_symbols)->DigestMD5_inner) = DigestMD5; \
+    (p_symbols)->net_ConvertIPv4_deprecated = NULL; \
+
+# endif /* __PLUGIN__ */
+#endif /* __VLC_SYMBOLS_H */
index 8db19db..c614c86 100644 (file)
@@ -1,2 +1,2 @@
 DIST_SUBDIRS = interface playlist input audio_output video_output stream_output misc
-EXTRA_DIST = misc/modules_builtin.h.in misc/modules_plugin.h.in
+EXTRA_DIST = misc/modules_builtin.h.in
index ed11e4f..e292677 100644 (file)
 
 #include "vlc_image.h"
 
-#ifdef HAVE_DYNAMIC_PLUGINS
-#   include "modules_plugin.h"
-#endif
-
 #if defined( _MSC_VER ) && defined( UNDER_CE )
 #    include "modules_builtin_evc.h"
 #elif defined( _MSC_VER )
diff --git a/src/misc/modules_plugin.h.in b/src/misc/modules_plugin.h.in
deleted file mode 100644 (file)
index 563569e..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-/*****************************************************************************
- * modules_plugin.h : Plugin management functions used by the core application.
- *****************************************************************************
- * Copyright (C) 2001 VideoLAN
- * $Id$
- *
- * Authors: Samuel Hocevar <sam@zoy.org>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
- *****************************************************************************/
-
-/*****************************************************************************
- * STORE_SYMBOLS: store known symbols into p_symbols for plugin access.
- *****************************************************************************/
diff --git a/toolbox b/toolbox
index 9adb9a8..8658372 100755 (executable)
--- a/toolbox
+++ b/toolbox
@@ -403,44 +403,8 @@ then
   if test -z "${builddir}"; then
     builddir="`sed -ne 's/^top_builddir *= *//p' < Makefile`"
   fi
-  mkdir -p "${builddir}/include"
-
-  LIBVLC_HEADERS=`getfiles HEADERS_include`
   BUILTINS=`sed -ne 's/.*builtins *= *" *\([^"]*\)".*/\1/p' vlc-config`
 
-  file="${builddir}/include/vlc_symbols.h"
-
-  rm -f ${file}.in
-  echo '/* DO NOT EDIT THIS FILE! See Makefile.am */' >> ${file}.in
-  echo 'struct module_symbols_t {' >> ${file}.in
-  cat ${LIBVLC_HEADERS} | grep '^ *VLC_EXPORT.*;' | sed -e 's/VLC_EXPORT( *\([^,]*\), *\([^,]*\), *\(.*\));.*/    \1 (* \2_inner) \3;/' >> ${file}.in
-  echo '};' >> ${file}.in
-  echo '#ifdef __PLUGIN__' >> ${file}.in
-  cat ${LIBVLC_HEADERS} | grep '^ *VLC_EXPORT.*;' | sed -e 's/VLC_EXPORT( *\([^,]*\), *\([^,]*\), *\(.*\));.*/#   define \2 p_symbols->\2_inner/' >> ${file}.in
-  echo '#endif /* __PLUGIN__ */' >> ${file}.in
-  if diff >/dev/null 2>&1 ${file} ${file}.in
-  then
-    rm -f ${file}.in
-  else
-    echo "creating new ${file}"
-    mv -f ${file}.in ${file}
-  fi
-
-  file="${builddir}/src/misc/modules_plugin.h"
-
-  rm -f ${file}.tmp
-  sed -e 's#.*\$[I][d]:.*# * Automatically generated from '${file}'.in by bootstrap#' < ${srcdir}/src/misc/modules_plugin.h.in > ${file}.tmp
-  echo '#define STORE_SYMBOLS( p_symbols ) \' >> ${file}.tmp
-  cat ${LIBVLC_HEADERS} | grep '^ *VLC_EXPORT.*;' | sed -e 's/VLC_EXPORT( *\([^,]*\), *\([^,]*\), *\(.*\));.*/    (p_symbols)->\2_inner = \2; \\/' >> ${file}.tmp
-  echo '' >> ${file}.tmp
-  if diff >/dev/null 2>&1 ${file} ${file}.tmp
-  then
-    rm -f ${file}.tmp
-  else
-    echo "creating new ${file}"
-    mv -f ${file}.tmp ${file}
-  fi
-
   file="${builddir}/src/misc/modules_builtin.h"
 
   rm -f ${file}.tmp && cp ${srcdir}/src/misc/modules_builtin.h.in ${file}.tmp
diff --git a/vlc-api.pl b/vlc-api.pl
new file mode 100755 (executable)
index 0000000..8708240
--- /dev/null
@@ -0,0 +1,184 @@
+#!/usr/bin/perl
+#*****************************************************************************
+#* vlc-api.pl: VLC API maintenance script
+#*****************************************************************************
+#* Copyright (C) 2005 VideoLAN
+#* $Id$
+#*
+#* Authors: Rémi Denis-Courmont <rem # videolan.org>
+#*
+#* This program is free software; you can redistribute it and/or modify
+#* it under the terms of the GNU General Public License as published by
+#* the Free Software Foundation; either version 2 of the License, or
+#* (at your option) any later version.
+#*
+#* This program is distributed in the hope that it will be useful,
+#* but WITHOUT ANY WARRANTY; without even the implied warranty of
+#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#* GNU General Public License for more details.
+#*
+#* You should have received a copy of the GNU General Public License
+#* along with this program; if not, write to the Free Software
+#* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
+#*****************************************************************************/
+
+use strict;
+
+#
+# Reads to-be exported APIs
+#
+my %new_APIs;
+
+while (<STDIN>)
+{
+       if (/VLC_EXPORT\(\s*(\w.*\S)\s*,\s*(\w*)\s*,\s*\(\s*(\w.*\S)\s*\)\s*\)[^)]*$/)
+       {
+               $new_APIs{$2} = [ ( $1, $3 ) ];
+       } 
+}
+
+#
+# Write header's header
+#
+open my $new_sym, '> include/vlc_symbols.h.new' or die "$!";
+print { $new_sym }
+       "/*\n".
+       " * This file is automatically generated. DO NOT EDIT!\n".
+       " * You can force an update with \"make stamp-api\".\n".
+       " */\n".
+       "\n".
+       "#ifndef __VLC_SYMBOLS_H\n".
+       "# define __VLC_SYMBOLS_H\n".
+       "\n".
+       "/*\n".
+       " * This is the big VLC API structure for plugins :\n".
+       " * Changing its layout breaks plugin's binary compatibility,\n".
+       " * so DO NOT DO THAT.\n".
+       " * In case of conflict with SVN, add your uncommited APIs\n".
+       " * at the *end* of the structure so they don't mess the other's\n".
+       " * offset in the structure.\n".
+       " */\n".
+       "struct module_symbols_t\n".
+       "{\n";
+
+my $changes = 0;
+
+#
+# Compares new APIs with currently exported APIs
+#
+my @API;
+my @deprecated_API;
+
+open my $oldfd, '< include/vlc_symbols.h';
+while (<$oldfd>)
+{
+       if (/^    void \*(\w*)_deprecated;$/)
+       {
+               if (defined $new_APIs{$2})
+               {
+                       print "[info] $2 was RESTORED!\n";
+                       print { $new_sym }
+                               "    ".$new_APIs{$1}[0]." (*$1_inner) (".$new_APIs{$1}[1].");\n";
+                       delete $new_APIs{$1};
+                       push (@API, $1);
+                       $changes++;
+               }
+               else
+               {
+                       print { $new_sym } $_;
+                       push (@deprecated_API, $1);
+               }
+       }
+       elsif (/^\s*(\w.*\S)\s*\(\*\s*(\w*)_inner\)\s*\(\s*(\w.*\S)\s*\)\s*;\s*$/)
+       {
+               if (!defined $new_APIs{$2})
+               {
+                       print "[warn] $2 was REMOVED!\n";
+                       print { $new_sym } "    void *$2_deprecated;\n";
+                       push (@deprecated_API, $2);
+                       $changes++;
+               }
+               elsif (($new_APIs{$2}[0] ne $1)
+                   || ($new_APIs{$2}[1] ne $3))
+               {
+                       print
+                               "[warn] $2 was CHANGED!\n".
+                               "       Old argument(s) : \"$3\"\n".
+                               "       New argument(s) : \"".$new_APIs{$2}[1]."\"\n".
+                               "       Old return type : \"$1\"\n".
+                               "       New return type : \"".$new_APIs{$2}[0]."\"\n";
+
+                       print { $new_sym }
+                               "    ".$new_APIs{$2}[0]." (*$2_inner) (".$new_APIs{$2}[1].");\n";
+                       delete $new_APIs{$2};
+                       push (@API, $2);
+                       $changes++;
+               }
+               else
+               {
+                       print { $new_sym } "    $1 (*$2_inner) ($3);\n";
+                       push (@API, $2);
+                       delete $new_APIs{$2};
+               }
+       }
+}
+close $oldfd;
+
+#
+# Adds brand-new APIs
+#
+foreach (keys %new_APIs)
+{
+       print "[info] $_ was ADDED!\n";
+       print { $new_sym }
+               "    ".$new_APIs{$_}[0]." (*${_}_inner) (".$new_APIs{$_}[1].");\n";
+       push (@API, $_);
+       $changes++;
+}
+
+#
+# Writes #defines
+#
+print { $new_sym }
+       "};\n".
+       "# if defined (__PLUGIN__)\n";
+       
+foreach (@API)
+{
+       print { $new_sym } "#  define $_ (p_symbols)->${_}_inner\n";
+}
+
+print { $new_sym }
+       "# elif defined (HAVE_DYNAMIC_PLUGINS) && !defined (__BUILTIN__)\n".
+       "/******************************************************************\n".
+       " * STORE_SYMBOLS: store VLC APIs into p_symbols for plugin access.\n".
+       " ******************************************************************/\n".
+       "#  define STORE_SYMBOLS( p_symbols ) \\\n";
+
+foreach (@API)
+{
+       print { $new_sym } "    ((p_symbols)->${_}_inner) = $_; \\\n";
+}
+foreach (@deprecated_API)
+{
+       print { $new_sym } "    (p_symbols)->${_}_deprecated = NULL; \\\n";
+}
+
+print { $new_sym }
+       "\n".
+       "# endif /* __PLUGIN__ */\n".
+       "#endif /* __VLC_SYMBOLS_H */\n";
+close $new_sym;
+
+#
+# Replace headers if needed
+#
+if ($changes != 0)
+{
+       rename 'include/vlc_symbols.h.new', 'include/vlc_symbols.h';
+       print "$changes API(s) changed.\n";
+}
+else
+{
+       unlink 'include/vlc_symbols.h.new';
+}
index 95e0b36..658c893 100644 (file)
@@ -85,7 +85,7 @@ if test "${top_builddir}" != ""; then
 elif test "${TOP_BUILDDIR}" != ""; then
   top_builddir="${TOP_BUILDDIR}/"
 fi
-includes="${includes} -I${top_builddir}include"
+includes="${includes}"
 cppflags="${includes}"
 libs="-L@libdir@"
 module=""