]> git.sesse.net Git - vlc/blobdiff - src/libvlc.h
Remove p_playlist from p_libvlc
[vlc] / src / libvlc.h
index 9b793a7adb6f307c7c0d41df86b2038293109c58..6df516b3d0a16f2b6a7f725b494b7bd99964ef49 100644 (file)
@@ -72,6 +72,44 @@ extern vlc_threadvar_t msg_context_global_key;
 extern uint32_t cpu_flags;
 uint32_t CPUCapabilities( void );
 
+/*
+ * Message/logging stuff
+ */
+
+#define NB_QUEUES 2
+
+typedef struct msg_queue_t
+{
+    int                     i_id;
+
+    /** Message queue lock */
+    vlc_mutex_t             lock;
+    bool              b_overflow;
+
+    /* Message queue */
+    msg_item_t              msg[VLC_MSG_QSIZE];           /**< message queue */
+    int i_start;
+    int i_stop;
+
+    /* Subscribers */
+    int i_sub;
+    msg_subscription_t **pp_sub;
+
+    /* Logfile for WinCE */
+#ifdef UNDER_CE
+    FILE *logfile;
+#endif
+} msg_queue_t;
+
+/**
+ * Store all data requiered by messages interfaces.
+ */
+typedef struct msg_bank_t
+{
+    vlc_mutex_t             lock;
+    msg_queue_t             queues[NB_QUEUES];
+} msg_bank_t;
+
 /*
  * Unicode stuff
  */
@@ -98,14 +136,14 @@ extern void *
 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
+ *
+ * This structure has an unique instance, statically allocated in libvlc and
+ * never accessed from the outside. It stores process-wide VLC variables,
+ * mostly process-wide locks, and (currently) the module bank and objects tree.
+ */
+typedef struct libvlc_global_data_t
 {
     VLC_COMMON_MEMBERS
 
@@ -115,7 +153,6 @@ struct libvlc_global_data_t
     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( SYS_BEOS )
@@ -125,13 +162,15 @@ struct libvlc_global_data_t
 #elif defined( WIN32 )
     char *                 psz_vlcpath;
 #endif
-};
+} libvlc_global_data_t;
 
 
 libvlc_global_data_t *vlc_global (void);
 libvlc_int_t *vlc_current_object (int i_object);
 
-/* Private LibVLC data for each objects */
+/**
+ * Private LibVLC data for each object.
+ */
 struct vlc_object_internals_t
 {
     /* Object variables */
@@ -164,6 +203,51 @@ static inline vlc_object_internals_t *vlc_internals( vlc_object_t *obj )
     return ((vlc_object_internals_t *)obj) - 1;
 }
 
+/**
+ * Private LibVLC instance data.
+ */
+typedef struct libvlc_priv_t
+{
+    /* Configuration */
+    vlc_mutex_t        config_lock; ///< config file lock
+    char *             psz_configfile;   ///< location of config file
+
+    /* There is no real reason to keep a list of items, but not to break
+     * everything, let's keep it */
+    input_item_array_t input_items; ///< Array of all created input items
+    int                i_last_input_id ; ///< Last id of input item
+
+    /* Messages */
+    msg_bank_t         msg_bank;    ///< The message bank
+    int                i_verbose;   ///< info messages
+    bool               b_color;     ///< color messages?
+
+    /* Timer stats */
+    vlc_mutex_t        timer_lock;  ///< Lock to protect timers
+    counter_t        **pp_timers;   ///< Array of all timers
+    int                i_timers;    ///< Number of timers
+    bool               b_stats;     ///< Whether to collect stats
+
+    void              *p_stats_computer;  ///< Input thread computing stats
+                                          /// (needs cleanup)
+
+    module_t          *p_memcpy_module;  ///< Fast memcpy plugin used
+    playlist_t        *p_playlist; //< the playlist singleton
+    vlm_t             *p_vlm;  ///< the VLM singleton (or NULL)
+    vlc_object_t      *p_interaction;    ///< interface interaction object
+    httpd_t           *p_httpd; ///< HTTP daemon (src/network/httpd.c)
+} libvlc_priv_t;
+
+static inline libvlc_priv_t *libvlc_priv (libvlc_int_t *libvlc)
+{
+    return (libvlc_priv_t *)(libvlc + 1);
+}
+
+#define libvlc_stats( o ) (libvlc_priv((VLC_OBJECT(o))->p_libvlc)->b_stats)
+
+/**
+ * LibVLC "main module" configuration settings array.
+ */
 extern module_config_t libvlc_config[];
 extern const size_t libvlc_config_count;