00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef VLC_EVENTS_H
00026 # define VLC_EVENTS_H
00027
00028 #include <vlc_arrays.h>
00029 #include <vlc_meta.h>
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100 struct vlc_event_listeners_group_t;
00101
00102
00103 typedef struct vlc_event_manager_t
00104 {
00105 void * p_obj;
00106 vlc_mutex_t object_lock;
00107 vlc_mutex_t event_sending_lock;
00108 vlc_object_t *p_parent_object;
00109 DECL_ARRAY(struct vlc_event_listeners_group_t *) listeners_groups;
00110 } vlc_event_manager_t;
00111
00112
00113
00114 typedef enum vlc_event_type_t {
00115
00116 vlc_InputStateChanged,
00117 vlc_InputSelectedStreamChanged,
00118
00119
00120 vlc_InputItemMetaChanged,
00121 vlc_InputItemSubItemAdded,
00122 vlc_InputItemDurationChanged,
00123 vlc_InputItemPreparsedChanged,
00124 vlc_InputItemNameChanged,
00125 vlc_InputItemInfoChanged,
00126 vlc_InputItemErrorWhenReadingChanged,
00127
00128
00129 vlc_ServicesDiscoveryItemAdded,
00130 vlc_ServicesDiscoveryItemRemoved,
00131 vlc_ServicesDiscoveryStarted,
00132 vlc_ServicesDiscoveryEnded
00133 } vlc_event_type_t;
00134
00135
00136 typedef struct vlc_event_t
00137 {
00138 vlc_event_type_t type;
00139 void * p_obj;
00140 union vlc_event_type_specific
00141 {
00142
00143 struct vlc_input_state_changed
00144 {
00145 int new_state;
00146 } input_state_changed;
00147 struct vlc_input_selected_stream_changed
00148 {
00149 void * unused;
00150 } input_selected_stream_changed;
00151
00152
00153 struct vlc_input_item_meta_changed
00154 {
00155 vlc_meta_type_t meta_type;
00156 } input_item_meta_changed;
00157 struct vlc_input_item_subitem_added
00158 {
00159 input_item_t * p_new_child;
00160 } input_item_subitem_added;
00161 struct vlc_input_item_duration_changed
00162 {
00163 mtime_t new_duration;
00164 } input_item_duration_changed;
00165 struct vlc_input_item_preparsed_changed
00166 {
00167 int new_status;
00168 } input_item_preparsed_changed;
00169 struct vlc_input_item_name_changed
00170 {
00171 const char * new_name;
00172 } input_item_name_changed;
00173 struct vlc_input_item_info_changed
00174 {
00175 void * unused;
00176 } input_item_info_changed;
00177 struct input_item_error_when_reading_changed
00178 {
00179 bool new_value;
00180 } input_item_error_when_reading_changed;
00181
00182
00183 struct vlc_services_discovery_item_added
00184 {
00185 input_item_t * p_new_item;
00186 const char * psz_category;
00187 } services_discovery_item_added;
00188 struct vlc_services_discovery_item_removed
00189 {
00190 input_item_t * p_item;
00191 } services_discovery_item_removed;
00192 struct vlc_services_discovery_started
00193 {
00194 void * unused;
00195 } services_discovery_started;
00196 struct vlc_services_discovery_ended
00197 {
00198 void * unused;
00199 } services_discovery_ended;
00200
00201 } u;
00202 } vlc_event_t;
00203
00204
00205 typedef void ( *vlc_event_callback_t )( const vlc_event_t *, void * );
00206
00207
00208
00209
00210
00211
00212
00213
00214
00215
00216 #define vlc_event_manager_init_with_vlc_object(a,b) \
00217 vlc_event_manager_init( a, b, b )
00218
00219 #define vlc_event_manager_init(a,b,c) \
00220 __vlc_event_manager_init(a, b, VLC_OBJECT(c))
00221 VLC_EXPORT(int, __vlc_event_manager_init, ( vlc_event_manager_t * p_em,
00222 void * p_obj, vlc_object_t * ));
00223
00224
00225
00226
00227 VLC_EXPORT(void, vlc_event_manager_fini, ( vlc_event_manager_t * p_em ));
00228
00229
00230
00231
00232 VLC_EXPORT(int, vlc_event_manager_register_event_type,
00233 ( vlc_event_manager_t * p_em, vlc_event_type_t event_type ));
00234
00235
00236
00237
00238 VLC_EXPORT(void, vlc_event_send, ( vlc_event_manager_t * p_em,
00239 vlc_event_t * p_event ));
00240
00241
00242
00243
00244 #define vlc_event_attach(a, b, c, d) __vlc_event_attach(a, b, c, d, #c)
00245 VLC_EXPORT(int, __vlc_event_attach, ( vlc_event_manager_t * p_event_manager,
00246 vlc_event_type_t event_type,
00247 vlc_event_callback_t pf_callback,
00248 void *p_user_data,
00249 const char * psz_debug_name ));
00250
00251
00252
00253
00254 VLC_EXPORT(int, vlc_event_detach, ( vlc_event_manager_t *p_event_manager,
00255 vlc_event_type_t event_type,
00256 vlc_event_callback_t pf_callback,
00257 void *p_user_data ));
00258
00259 #endif