]> git.sesse.net Git - vlc/blobdiff - include/vlc_events.h
use the sync_instance library for tests too
[vlc] / include / vlc_events.h
index 6989fcb71fe9ef8f8d9e223a011a1e4f6174860d..22aa6e47834e37e5b64a4eb849492efedbc8759f 100644 (file)
@@ -42,7 +42,7 @@
  *
  * This implements a way to send and receive event for an object (which can be
  * a simple C struct or less).
- * 
+ *
  * This is in direct concurrency with the Variable based Callback
  * (see src/misc/variables.c).
  *
@@ -59,7 +59,7 @@
  *
  * (vlc_cool_object_t doesn't need to have the VLC_COMMON_MEMBERS.)
  *
- * struct vlc_cool_object_t 
+ * struct vlc_cool_object_t
  * {
  *        ...
  *        vlc_event_manager_t p_event_manager;
@@ -104,14 +104,25 @@ typedef struct vlc_event_manager_t
 {
     void * p_obj;
     vlc_mutex_t object_lock;
+    vlc_mutex_t event_sending_lock;
+    vlc_object_t *p_parent_object;
     DECL_ARRAY(struct vlc_event_listeners_group_t *) listeners_groups;
 } vlc_event_manager_t;
 
 /* List of event */
+/* Be sure to keep sync-ed with misc/events.c debug name table */
 typedef enum vlc_event_type_t {
     /* Input item events */
     vlc_InputItemMetaChanged,
     vlc_InputItemSubItemAdded,
+    vlc_InputItemDurationChanged,
+    vlc_InputItemPreparsedChanged,
+
+    /* Service Discovery event */
+    vlc_ServicesDiscoveryItemAdded,
+    vlc_ServicesDiscoveryItemRemoved,
+    vlc_ServicesDiscoveryStarted,
+    vlc_ServicesDiscoveryEnded
 } vlc_event_type_t;
 
 /* Event definition */
@@ -130,6 +141,34 @@ typedef struct vlc_event_t
         {
             input_item_t * p_new_child;
         } input_item_subitem_added;
+        struct vlc_input_item_duration_changed
+        {
+            mtime_t new_duration;
+        } input_item_duration_changed;
+        struct vlc_input_item_preparsed_changed
+        {
+            int new_status;
+        } input_item_preparsed_changed;
+
+        /* Service discovery events */
+        struct vlc_services_discovery_item_added
+        {
+            input_item_t * p_new_item;
+            const char * psz_category;
+        } services_discovery_item_added;
+        struct vlc_services_discovery_item_removed
+        {
+            input_item_t * p_item;
+        } services_discovery_item_removed;
+        struct vlc_services_discovery_started
+        {
+            void * unused;
+        } services_discovery_started;
+        struct vlc_services_discovery_ended
+        {
+            void * unused;
+        } services_discovery_ended;
+
     } u;
 } vlc_event_t;
 
@@ -168,10 +207,12 @@ VLC_EXPORT(void, vlc_event_send, ( vlc_event_manager_t * p_em,
 /*
  * Add a callback for an event.
  */
-VLC_EXPORT(int, vlc_event_attach, ( vlc_event_manager_t * p_event_manager,
-                                    vlc_event_type_t event_type,
-                                    vlc_event_callback_t pf_callback,
-                                    void *p_user_data ));
+#define vlc_event_attach(a, b, c, d) __vlc_event_attach(a, b, c, d, #c)
+VLC_EXPORT(int, __vlc_event_attach, ( vlc_event_manager_t * p_event_manager,
+                                      vlc_event_type_t event_type,
+                                      vlc_event_callback_t pf_callback,
+                                      void *p_user_data,
+                                      const char * psz_debug_name ));
 
 /*
  * Remove a callback for an event.