Skip to content

Commit 5b93934

Browse files
committed
fix gstreamer plugins
1 parent 53758b0 commit 5b93934

File tree

7 files changed

+42
-26
lines changed

7 files changed

+42
-26
lines changed

CMakePresets.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
"TRY_ENABLE_OPENGL": false,
1414
"ENABLE_OPENGL": true,
1515
"BUILD_GSTREAMER_VIDEO_PLAYER_PLUGIN": true,
16+
"TRY_BUILD_GSTREAMER_VIDEO_PLAYER_PLUGIN": false,
1617
"BUILD_GSTREAMER_AUDIO_PLAYER_PLUGIN": true,
1718
"TRY_BUILD_GSTREAMER_AUDIO_PLAYER_PLUGIN": false,
1819
"BUILD_SENTRY_PLUGIN": true,

src/flutter-pi.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -599,9 +599,8 @@ int flutterpi_post_delayed_platform_task(struct flutterpi *flutterpi, void_callb
599599
return evloop_post_delayed_task(flutterpi->platform_loop, callback, userdata, target_time_usec);
600600
}
601601

602-
/// TODO: Remove
603-
struct evsrc *flutterpi_add_io_source(struct flutterpi *flutterpi, int fd, uint32_t events, evloop_io_handler_t callback, void *userdata) {
604-
return evloop_add_io(flutterpi->platform_loop, fd, events, callback, userdata);
602+
struct evloop *flutterpi_get_platform_event_loop(struct flutterpi *flutterpi) {
603+
return flutterpi->platform_loop;
605604
}
606605

607606
struct fl_task {

src/flutter-pi.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,9 +144,9 @@ int flutterpi_post_platform_task(struct flutterpi *flutterpi, void_callback_t ca
144144

145145
int flutterpi_post_delayed_platform_task(struct flutterpi *flutterpi, void_callback_t callback, void *userdata, uint64_t target_time_usec);
146146

147-
struct evloop *flutterpi_get_raster_event_loop(struct flutterpi *flutterpi);
147+
struct evloop *flutterpi_get_platform_event_loop(struct flutterpi *flutterpi);
148148

149-
int flutterpi_sd_event_add_io(sd_event_source **source_out, int fd, uint32_t events, sd_event_io_handler_t callback, void *userdata);
149+
struct evloop *flutterpi_get_raster_event_loop(struct flutterpi *flutterpi);
150150

151151
int flutterpi_send_platform_message(
152152
struct flutterpi *flutterpi,

src/plugins/audioplayers.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,9 @@
55
#include <stdint.h>
66

77
struct audio_player;
8+
struct evloop;
89

9-
struct audio_player *audio_player_new(char *playerId, char *channel);
10+
struct audio_player *audio_player_new(struct evloop *platform_loop, char *playerId, char *channel);
1011

1112
// Instance function
1213

@@ -38,7 +39,7 @@ void audio_player_set_source_url(struct audio_player *self, char *url);
3839

3940
bool audio_player_is_id(struct audio_player *self, char *id);
4041

41-
const char* audio_player_subscribe_channel_name(const struct audio_player *self);
42+
const char *audio_player_subscribe_channel_name(const struct audio_player *self);
4243

4344
///Asks to subscribe to channel events
4445
///

src/plugins/audioplayers/player.c

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
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

1718
struct 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);
4952
static void audio_player_on_seek_completed(struct audio_player *self);
5053
static 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

7373
static 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
}

src/plugins/audioplayers/plugin.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,7 @@ static struct audio_player *audioplayers_linux_plugin_get_player(char *player_id
288288
ASSUME(entry != NULL);
289289

290290
LOG_DEBUG("Create player(id=%s)\n", player_id);
291-
player = audio_player_new(player_id, AUDIOPLAYERS_LOCAL_CHANNEL);
291+
player = audio_player_new(flutterpi_get_platform_event_loop(plugin.flutterpi), player_id, AUDIOPLAYERS_LOCAL_CHANNEL);
292292

293293
if (player == NULL) {
294294
LOG_ERROR("player(id=%s) cannot be created", player_id);

src/plugins/gstreamer_video_player/player.c

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
#include "plugins/gstreamer_video_player.h"
2323
#include "texture_registry.h"
2424
#include "util/collection.h"
25+
#include "util/event_loop.h"
2526
#include "util/logging.h"
2627

2728
#ifdef DEBUG
@@ -157,7 +158,7 @@ struct gstplayer {
157158

158159
GstElement *pipeline, *sink;
159160
GstBus *bus;
160-
sd_event_source *busfd_events;
161+
struct evsrc *busfd_events;
161162

162163
bool is_live;
163164
};
@@ -613,11 +614,10 @@ static void on_bus_message(struct gstplayer *player, GstMessage *msg) {
613614
return;
614615
}
615616

616-
static int on_bus_fd_ready(sd_event_source *s, int fd, uint32_t revents, void *userdata) {
617+
static enum event_handler_return on_bus_fd_ready(int fd, uint32_t revents, void *userdata) {
617618
struct gstplayer *player;
618619
GstMessage *msg;
619620

620-
(void) s;
621621
(void) fd;
622622
(void) revents;
623623

@@ -633,7 +633,7 @@ static int on_bus_fd_ready(sd_event_source *s, int fd, uint32_t revents, void *u
633633

634634
DEBUG_TRACE_END(player, "on_bus_fd_ready");
635635

636-
return 0;
636+
return EVENT_HANDLER_CONTINUE;
637637
}
638638

639639
static GstPadProbeReturn on_query_appsink(GstPad *pad, GstPadProbeInfo *info, void *userdata) {
@@ -849,7 +849,6 @@ void on_source_setup(GstElement *bin, GstElement *source, gpointer userdata) {
849849

850850
static int init(struct gstplayer *player, bool force_sw_decoders) {
851851
GstStateChangeReturn state_change_return;
852-
sd_event_source *busfd_event_source;
853852
GstElement *pipeline, *sink, *src;
854853
GstBus *bus;
855854
GstPad *pad;
@@ -961,7 +960,15 @@ static int init(struct gstplayer *player, bool force_sw_decoders) {
961960

962961
gst_bus_get_pollfd(bus, &fd);
963962

964-
flutterpi_sd_event_add_io(&busfd_event_source, fd.fd, EPOLLIN, on_bus_fd_ready, player);
963+
uint32_t events = 0;
964+
events |= fd.events & G_IO_IN ? EPOLLIN : 0;
965+
events |= fd.events & G_IO_OUT ? EPOLLOUT : 0;
966+
events |= fd.events & G_IO_PRI ? EPOLLPRI : 0;
967+
events |= fd.events & G_IO_ERR ? EPOLLERR : 0;
968+
events |= fd.events & G_IO_HUP ? EPOLLHUP : 0;
969+
970+
struct evsrc *busfd_event_source =
971+
evloop_add_io(flutterpi_get_platform_event_loop(player->flutterpi), fd.fd, events, on_bus_fd_ready, player);
965972

966973
LOG_DEBUG("Setting state to paused...\n");
967974
state_change_return = gst_element_set_state(GST_ELEMENT(pipeline), GST_STATE_PAUSED);
@@ -994,7 +1001,7 @@ static int init(struct gstplayer *player, bool force_sw_decoders) {
9941001

9951002
static void maybe_deinit(struct gstplayer *player) {
9961003
if (player->busfd_events != NULL) {
997-
sd_event_source_unrefp(&player->busfd_events);
1004+
evsrc_destroy(player->busfd_events);
9981005
}
9991006
if (player->sink != NULL) {
10001007
gst_object_unref(GST_OBJECT(player->sink));

0 commit comments

Comments
 (0)