From: <bar...@t-...> - 2002-09-28 20:13:45
|
hi folks, this is what my public async event interface currently looks like: /* * async xine event mechanism * * to receive events you have to register an event queue with * the xine engine (xine_event_new_queue, see below) and check * for incoming events regularly (xine_event_get/wait). * * to send events to every module listening you don't need * to register an event queue but simply call xine_event_send. */ /* event types */ #define XINE_EVENT_UI_PLAYBACK_FINISHED 1 /* frontend can e.g. move on to next playlist entry */ #define XINE_EVENT_UI_CHANNELS_CHANGED 2 /* inform ui that new channel info is available */ #define XINE_EVENT_UI_SET_TITLE 3 /* request title display change in ui */ #define XINE_EVENT_UI_MESSAGE 4 /* message (dialog) for the ui to display */ #define XINE_EVENT_FRAME_FORMAT_CHANGE 5 /* e.g. aspect ratio change during dvd playback */ #define XINE_EVENT_AUDIO_LEVEL 6 /* report current audio level (l/r) */ /* input events coming from frontend */ #define XINE_EVENT_INPUT_MOUSE_BUTTON 101 #define XINE_EVENT_INPUT_MOUSE_MOVE 102 #define XINE_EVENT_INPUT_MENU1 103 #define XINE_EVENT_INPUT_MENU2 104 #define XINE_EVENT_INPUT_MENU3 105 #define XINE_EVENT_INPUT_MENU4 106 #define XINE_EVENT_INPUT_MENU5 106 #define XINE_EVENT_INPUT_MENU6 108 #define XINE_EVENT_INPUT_MENU7 109 #define XINE_EVENT_INPUT_UP 110 #define XINE_EVENT_INPUT_DOWN 111 #define XINE_EVENT_INPUT_LEFT 112 #define XINE_EVENT_INPUT_RIGHT 113 #define XINE_EVENT_INPUT_SELECT 114 #define XINE_EVENT_INPUT_NEXT 115 #define XINE_EVENT_INPUT_PREVIOUS 116 #define XINE_EVENT_INPUT_ANGLE_NEXT 117 #define XINE_EVENT_INPUT_ANGLE_PREVIOUS 118 #define XINE_EVENT_INPUT_BUTTON_FORCE 119 #define XINE_EVENT_INPUT_NUMBER_0 120 #define XINE_EVENT_INPUT_NUMBER_1 121 #define XINE_EVENT_INPUT_NUMBER_2 122 #define XINE_EVENT_INPUT_NUMBER_3 123 #define XINE_EVENT_INPUT_NUMBER_4 124 #define XINE_EVENT_INPUT_NUMBER_5 125 #define XINE_EVENT_INPUT_NUMBER_6 126 #define XINE_EVENT_INPUT_NUMBER_7 127 #define XINE_EVENT_INPUT_NUMBER_8 128 #define XINE_EVENT_INPUT_NUMBER_9 129 #define XINE_EVENT_INPUT_NUMBER_10_ADD 130 /* * input events */ typedef struct { uint32_t type; /* event type (constants see above) */ xine_stream_t *stream; /* stream this event originated from */ xine_event_t event; uint8_t button; /* Generally 1 = left, 2 = mid, 3 = right */ uint16_t x,y; /* In Image space */ } xine_input_event_t; /* * UI event - send information to/from UI. */ typedef struct { uint32_t type; /* event type (constants see above) */ xine_stream_t *stream; /* stream this event belongs to */ char *str[256]; int num_buttons; int response; } xine_ui_event_t; /* * notify frame format change */ typedef struct { uint32_t type; /* event type (constants see above) */ xine_stream_t *stream; /* stream this event belongs to */ int width; int height; int aspect; } xine_frame_format_change_event_t; /* * audio level for left/right channel */ typedef struct { uint32_t type; /* event type (constants see above) */ xine_stream_t *stream; /* stream this event belongs to */ int left; int right; /* 0..255 */ } xine_audio_level_event_t; /* * xine event union */ typedef union { uint32_t type; /* event type (constants see above) */ xine_stream_t *stream; /* stream this event belongs to */ xine_input_event_t input_event; xine_ui_event_t ui_event; xine_frame_format_change_event_t frame_format_change_event; xine_audio_level_event_t audio_level_event; } xine_event_t; /* opaque xine_event_queue_t */ typepdef struct xine_event_queue_s xine_event_queue_t; /* * register a new event queue * * you have to receive messages from this queue regularly * * use xine_event_dispose_queue to unregister and free the queue */ xine_event_queue_t *xine_event_new_queue (xine_stream_t *stream); void xine_event_dispose_queue (xine_event_queue_t *queue); /* * receive events * * free() the events received from these calls when no longer needed */ xine_event_t *xine_event_get (xine_event_queue_t *queue); xine_event_t *xine_event_wait (xine_event_queue_t *queue); /* * send an event to all queues * * the event will be copied so you can free or reuse * *event as soon as xine_event_send returns. */ void xine_event_send (xine_stream_t *stream, const xine_event_t *event); cheers, guenter -- "Cutting the space budget really restores my faith in humanity. It eliminates dreams, goals, and ideals and lets us get straight to the business of hate, debauchery, and self-annihilation." -- Johnny Hart |