1212#include "platformchannel.h"
1313#include "plugins/audioplayers.h"
1414#include "util/asserts.h"
15+ #include "util/event_loop.h"
1516#include "util/logging.h"
1617
1718struct audio_player {
@@ -35,6 +36,8 @@ struct audio_player {
3536 char * event_channel_name ;
3637
3738 _Atomic bool event_subscribed ;
39+
40+ struct evsrc * busfd_event_source ;
3841};
3942
4043// Private Class functions
@@ -49,25 +52,22 @@ static void audio_player_on_duration_update(struct audio_player *self);
4952static void audio_player_on_seek_completed (struct audio_player * self );
5053static void audio_player_on_playback_ended (struct audio_player * self );
5154
52- static int on_bus_fd_ready (sd_event_source * src , int fd , uint32_t revents , void * userdata ) {
53- struct audio_player * player = userdata ;
55+ static enum event_handler_return on_bus_fd_ready (int fd , uint32_t revents , void * userdata ) {
56+ struct audio_player * player ;
5457 GstMessage * msg ;
5558
56- (void ) src ;
5759 (void ) fd ;
5860 (void ) revents ;
59-
60- /* DEBUG_TRACE_BEGIN( player, "on_bus_fd_ready"); */
61+ ASSERT_NOT_NULL ( userdata );
62+ player = userdata ;
6163
6264 msg = gst_bus_pop (player -> bus );
6365 if (msg != NULL ) {
6466 audio_player_on_bus_message (player -> bus , msg , player );
6567 gst_message_unref (msg );
6668 }
6769
68- /* DEBUG_TRACE_END(player, "on_bus_fd_ready"); */
69-
70- return 0 ;
70+ return EVENT_HANDLER_CONTINUE ;
7171}
7272
7373static void audio_player_source_setup (GstElement * playbin , GstElement * source , GstElement * * p_src ) {
@@ -79,9 +79,8 @@ static void audio_player_source_setup(GstElement *playbin, GstElement *source, G
7979 }
8080}
8181
82- struct audio_player * audio_player_new (char * player_id , char * channel ) {
82+ struct audio_player * audio_player_new (struct evloop * platform_loop , char * player_id , char * channel ) {
8383 GPollFD fd ;
84- sd_event_source * busfd_event_source ;
8584
8685 struct audio_player * self = malloc (sizeof (struct audio_player ));
8786 if (self == NULL ) {
@@ -132,7 +131,14 @@ struct audio_player *audio_player_new(char *player_id, char *channel) {
132131
133132 gst_bus_get_pollfd (self -> bus , & fd );
134133
135- flutterpi_sd_event_add_io (& busfd_event_source , fd .fd , EPOLLIN , on_bus_fd_ready , self );
134+ uint32_t events = 0 ;
135+ events |= fd .events & G_IO_IN ? EPOLLIN : 0 ;
136+ events |= fd .events & G_IO_OUT ? EPOLLOUT : 0 ;
137+ events |= fd .events & G_IO_PRI ? EPOLLPRI : 0 ;
138+ events |= fd .events & G_IO_ERR ? EPOLLERR : 0 ;
139+ events |= fd .events & G_IO_HUP ? EPOLLHUP : 0 ;
140+
141+ self -> busfd_event_source = evloop_add_io (platform_loop , fd .fd , events , on_bus_fd_ready , self );
136142
137143 // Refresh continuously to emit recurring events
138144 g_timeout_add (1000 , (GSourceFunc ) audio_player_on_refresh , self );
@@ -602,4 +608,6 @@ void audio_player_release(struct audio_player *self) {
602608 if (playbinState > GST_STATE_NULL ) {
603609 gst_element_set_state (self -> playbin , GST_STATE_NULL );
604610 }
611+
612+ evsrc_destroy (self -> busfd_event_source );
605613}
0 commit comments