/*****************************************************************************
* libvlc.h: Internal libvlc generic/misc declaration
*****************************************************************************
- * Copyright © 2006 Rémi Denis-Courmont
+ * Copyright (C) 1999, 2000, 2001, 2002 the VideoLAN team
+ * Copyright © 2006-2007 Rémi Denis-Courmont
* $Id$
*
- * Authors: Rémi Denis-Courmont <rem # videolan , org>
+ * Authors: Vincent Seguin <seguin@via.ecp.fr>
*
* 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
extern const struct hotkey libvlc_hotkeys[];
extern const size_t libvlc_hotkeys_size;
+
+/*
+ * Threads subsystem
+ */
+int __vlc_threads_init( vlc_object_t * );
+int __vlc_threads_end( vlc_object_t * );
+
+/*
+ * CPU capabilities
+ */
+extern uint32_t cpu_flags;
+uint32_t CPUCapabilities( void );
+
+/*
+ * Unicode stuff
+ */
+
+/*
+ * LibVLC objects stuff
+ */
+
+extern vlc_object_t *
+vlc_custom_create (vlc_object_t *p_this, size_t i_size, int i_type,
+ const char *psz_type);
+
+/*****************************************************************************
+ * libvlc_global_data_t (global variable)
+ *****************************************************************************
+ * This structure has an unique instance, statically allocated in main and
+ * never accessed from the outside. It stores once-initialized data such as
+ * the CPU capabilities or the global lock.
+ *****************************************************************************/
+struct libvlc_global_data_t
+{
+ VLC_COMMON_MEMBERS
+
+ vlc_bool_t b_ready; ///< Initialization boolean
+
+ /* Object structure data */
+ int i_counter; ///< object counter
+ int i_objects; ///< Attached objects count
+ vlc_object_t ** pp_objects; ///< Array of all objects
+
+ module_bank_t * p_module_bank; ///< The module bank
+ intf_thread_t *p_probe; ///< Devices prober
+
+ /* Arch-specific variables */
+#if !defined( WIN32 )
+ vlc_bool_t b_daemon;
+#endif
+#if defined( SYS_BEOS )
+ vlc_object_t * p_appthread;
+ char * psz_vlcpath;
+#elif defined( __APPLE__ )
+ char * psz_vlcpath;
+ vlc_iconv_t iconv_macosx; /* for HFS+ file names */
+ vlc_mutex_t iconv_lock;
+#elif defined( WIN32 )
+ char * psz_vlcpath;
+#endif
+};
+
+
+libvlc_global_data_t *vlc_global (void);
+libvlc_int_t *vlc_current_object (int i_object);
+
+/* Private LibVLC data for each objects */
+struct vlc_object_internals_t
+{
+ /* Object variables */
+ variable_t * p_vars;
+ vlc_mutex_t var_lock;
+ int i_vars;
+
+ /* Thread properties, if any */
+ vlc_thread_t thread_id;
+ vlc_bool_t b_thread;
+
+ /* Objects thread synchronization */
+ int pipes[2];
+
+ /* Objects management */
+ unsigned i_refcount;
+ vlc_bool_t b_attached;
+};
+
+
+static inline vlc_object_internals_t *vlc_internals( vlc_object_t *obj )
+{
+ return obj->p_internals;
+}
+
#endif