simplify events and commands

This commit is contained in:
Wim Taymans 2016-10-24 15:30:15 +02:00
parent 0373f73bac
commit d3dd90bb05
25 changed files with 220 additions and 252 deletions

View file

@ -216,7 +216,7 @@ alsa_on_fd_events (SpaPollNotifyData *data)
SpaALSAMonitor *this = data->user_data;
struct udev_device *dev;
const char *str;
SpaMonitorEvent event;
SpaMonitorItem *item;
dev = udev_monitor_receive_device (this->umonitor);
if (fill_item (&this->uitem, dev) < 0)
@ -225,16 +225,17 @@ alsa_on_fd_events (SpaPollNotifyData *data)
if ((str = udev_device_get_action (dev)) == NULL)
str = "change";
item = &this->uitem.item;
if (strcmp (str, "add") == 0) {
event.type = SPA_MONITOR_EVENT_TYPE_ADDED;
item->event.type = SPA_MONITOR_EVENT_TYPE_ADDED;
} else if (strcmp (str, "change") == 0) {
event.type = SPA_MONITOR_EVENT_TYPE_CHANGED;
item->event.type = SPA_MONITOR_EVENT_TYPE_CHANGED;
} else if (strcmp (str, "remove") == 0) {
event.type = SPA_MONITOR_EVENT_TYPE_REMOVED;
item->event.type = SPA_MONITOR_EVENT_TYPE_REMOVED;
}
event.data = &this->uitem.item;
event.size = sizeof (this->uitem);
this->event_cb (&this->monitor, &event, this->user_data);
item->event.size = sizeof (this->uitem);
this->event_cb (&this->monitor, &item->event, this->user_data);
return 0;
}

View file

@ -241,14 +241,12 @@ xrun_recovery (SpaALSAState *state, snd_pcm_t *hndl, int err)
static void
pull_input (SpaALSAState *state, void *data, snd_pcm_uframes_t frames)
{
SpaNodeEvent event;
SpaNodeEventNeedInput ni;
event.type = SPA_NODE_EVENT_TYPE_NEED_INPUT;
event.size = sizeof (ni);
event.data = &ni;
ni.event.type = SPA_NODE_EVENT_TYPE_NEED_INPUT;
ni.event.size = sizeof (ni);
ni.port_id = 0;
state->event_cb (&state->node, &event, state->user_data);
state->event_cb (&state->node, &ni.event, state->user_data);
}
static int
@ -370,7 +368,6 @@ mmap_read (SpaALSAState *state)
if (b) {
SpaNodeEvent event;
SpaNodeEventHaveOutput ho;
SpaData *d;
@ -380,11 +377,10 @@ mmap_read (SpaALSAState *state)
b->next = NULL;
SPA_QUEUE_PUSH_TAIL (&state->ready, SpaALSABuffer, next, b);
event.type = SPA_NODE_EVENT_TYPE_HAVE_OUTPUT;
event.size = sizeof (ho);
event.data = &ho;
ho.event.type = SPA_NODE_EVENT_TYPE_HAVE_OUTPUT;
ho.event.size = sizeof (ho);
ho.port_id = 0;
state->event_cb (&state->node, &event, state->user_data);
state->event_cb (&state->node, &ho.event, state->user_data);
}
return 0;
}

View file

@ -566,14 +566,12 @@ spa_audiomixer_node_port_push_input (SpaNode *node,
static void
pull_port (SpaAudioMixer *this, uint32_t port_id, SpaPortOutputInfo *info, size_t pull_size)
{
SpaNodeEvent event;
SpaNodeEventNeedInput ni;
event.type = SPA_NODE_EVENT_TYPE_NEED_INPUT;
event.size = sizeof (ni);
event.data = &ni;
ni.event.type = SPA_NODE_EVENT_TYPE_NEED_INPUT;
ni.event.size = sizeof (ni);
ni.port_id = port_id;
this->event_cb (&this->node, &event, this->user_data);
this->event_cb (&this->node, &ni.event, this->user_data);
}
static void

View file

@ -229,15 +229,13 @@ spa_audiotestsrc_node_set_props (SpaNode *node,
static SpaResult
send_have_output (SpaAudioTestSrc *this)
{
SpaNodeEvent event;
SpaNodeEventHaveOutput ho;
if (this->event_cb) {
event.type = SPA_NODE_EVENT_TYPE_HAVE_OUTPUT;
event.size = sizeof (ho);
event.data = &ho;
ho.event.type = SPA_NODE_EVENT_TYPE_HAVE_OUTPUT;
ho.event.size = sizeof (ho);
ho.port_id = 0;
this->event_cb (&this->node, &event, this->user_data);
this->event_cb (&this->node, &ho.event, this->user_data);
}
return SPA_RESULT_OK;

View file

@ -186,7 +186,8 @@ v4l2_on_fd_events (SpaPollNotifyData *data)
SpaV4l2Monitor *this = data->user_data;
struct udev_device *dev;
const char *action;
SpaMonitorEvent event;
SpaMonitorItem *item;
dev = udev_monitor_receive_device (this->umonitor);
fill_item (&this->uitem, dev);
@ -196,16 +197,17 @@ v4l2_on_fd_events (SpaPollNotifyData *data)
if ((action = udev_device_get_action (dev)) == NULL)
action = "change";
item = &this->uitem.item;
if (strcmp (action, "add") == 0) {
event.type = SPA_MONITOR_EVENT_TYPE_ADDED;
item->event.type = SPA_MONITOR_EVENT_TYPE_ADDED;
} else if (strcmp (action, "change") == 0) {
event.type = SPA_MONITOR_EVENT_TYPE_CHANGED;
item->event.type = SPA_MONITOR_EVENT_TYPE_CHANGED;
} else if (strcmp (action, "remove") == 0) {
event.type = SPA_MONITOR_EVENT_TYPE_REMOVED;
item->event.type = SPA_MONITOR_EVENT_TYPE_REMOVED;
}
event.data = &this->uitem.item;
event.size = sizeof (this->uitem);
this->event_cb (&this->monitor, &event, this->user_data);
item->event.size = sizeof (this->uitem);
this->event_cb (&this->monitor, &item->event, this->user_data);
return 0;
}

View file

@ -225,25 +225,23 @@ spa_v4l2_source_node_set_props (SpaNode *node,
}
static SpaResult
do_command_complete (SpaPoll *poll,
uint32_t seq,
size_t size,
void *data,
void *user_data)
do_send_event (SpaPoll *poll,
bool async,
uint32_t seq,
size_t size,
void *data,
void *user_data)
{
SpaV4l2Source *this = user_data;
SpaNodeEvent event;
event.type = SPA_NODE_EVENT_TYPE_ASYNC_COMPLETE;
event.size = size;
event.data = data;
this->event_cb (&this->node, &event, this->user_data);
this->event_cb (&this->node, data, this->user_data);
return SPA_RESULT_OK;
}
static SpaResult
do_start (SpaPoll *poll,
bool async,
uint32_t seq,
size_t size,
void *data,
@ -255,19 +253,24 @@ do_start (SpaPoll *poll,
res = spa_v4l2_start (this);
ac.seq = seq;
ac.res = res;
spa_poll_invoke (this->state[0].main_loop,
do_command_complete,
seq,
sizeof (ac),
&ac,
this);
if (async) {
ac.event.type = SPA_NODE_EVENT_TYPE_ASYNC_COMPLETE;
ac.event.size = sizeof (SpaNodeEventAsyncComplete);
ac.seq = seq;
ac.res = res;
spa_poll_invoke (this->state[0].main_loop,
do_send_event,
seq,
sizeof (ac),
&ac,
this);
}
return res;
}
static SpaResult
do_pause (SpaPoll *poll,
bool async,
uint32_t seq,
size_t size,
void *data,
@ -279,18 +282,21 @@ do_pause (SpaPoll *poll,
res = spa_v4l2_pause (this);
ac.seq = seq;
ac.res = res;
spa_poll_invoke (this->state[0].main_loop,
do_command_complete,
seq,
sizeof (ac),
&ac,
this);
if (async) {
ac.event.type = SPA_NODE_EVENT_TYPE_ASYNC_COMPLETE;
ac.event.size = sizeof (SpaNodeEventAsyncComplete);
ac.seq = seq;
ac.res = res;
spa_poll_invoke (this->state[0].main_loop,
do_send_event,
seq,
sizeof (ac),
&ac,
this);
}
return res;
}
static SpaResult
spa_v4l2_source_node_send_command (SpaNode *node,
SpaNodeCommand *command)

View file

@ -895,7 +895,6 @@ static int
v4l2_on_fd_events (SpaPollNotifyData *data)
{
SpaV4l2Source *this = data->user_data;
SpaNodeEvent event;
SpaNodeEventHaveOutput ho;
if (data->fds[0].revents & POLLERR)
@ -907,11 +906,10 @@ v4l2_on_fd_events (SpaPollNotifyData *data)
if (mmap_read (this) < 0)
return 0;
event.type = SPA_NODE_EVENT_TYPE_HAVE_OUTPUT;
event.size = sizeof (ho);
event.data = &ho;
ho.event.type = SPA_NODE_EVENT_TYPE_HAVE_OUTPUT;
ho.event.size = sizeof (ho);
ho.port_id = 0;
this->event_cb (&this->node, &event, this->user_data);
this->event_cb (&this->node, &ho.event, this->user_data);
return 0;
}

View file

@ -182,15 +182,13 @@ spa_videotestsrc_node_set_props (SpaNode *node,
static SpaResult
send_have_output (SpaVideoTestSrc *this)
{
SpaNodeEvent event;
SpaNodeEventHaveOutput ho;
if (this->event_cb) {
event.type = SPA_NODE_EVENT_TYPE_HAVE_OUTPUT;
event.size = sizeof (ho);
event.data = &ho;
ho.event.type = SPA_NODE_EVENT_TYPE_HAVE_OUTPUT;
ho.event.size = sizeof (ho);
ho.port_id = 0;
this->event_cb (&this->node, &event, this->user_data);
this->event_cb (&this->node, &ho.event, this->user_data);
}
return SPA_RESULT_OK;

View file

@ -521,15 +521,13 @@ find_free_buffer (SpaVolume *this, SpaVolumePort *port)
static void
release_buffer (SpaVolume *this, SpaBuffer *buffer)
{
SpaNodeEvent event;
SpaNodeEventReuseBuffer rb;
event.type = SPA_NODE_EVENT_TYPE_REUSE_BUFFER;
event.data = &rb;
event.size = sizeof (rb);
rb.event.type = SPA_NODE_EVENT_TYPE_REUSE_BUFFER;
rb.event.size = sizeof (rb);
rb.port_id = 0;
rb.buffer_id = buffer->id;
this->event_cb (&this->node, &event, this->user_data);
this->event_cb (&this->node, &rb.event, this->user_data);
}
static SpaResult