fix example

This commit is contained in:
Wim Taymans 2019-08-15 19:07:03 +02:00
parent 78765e8d82
commit dff1cfe13e

View file

@ -62,10 +62,11 @@ struct buffer {
struct data { struct data {
struct spa_log *log; struct spa_log *log;
struct spa_system *system;
struct spa_loop *loop; struct spa_loop *loop;
struct spa_loop_control *control; struct spa_loop_control *control;
struct spa_support support[4]; struct spa_support support[5];
uint32_t n_support; uint32_t n_support;
struct spa_node *source; struct spa_node *source;
@ -149,18 +150,6 @@ static int make_node(struct data *data, struct spa_node **node, const char *lib,
return 0; return 0;
} }
static void handle_events(struct data *data)
{
SDL_Event event;
while (SDL_PollEvent(&event)) {
switch (event.type) {
case SDL_QUIT:
exit(0);
break;
}
}
}
static int on_source_ready(void *_data, int status) static int on_source_ready(void *_data, int status)
{ {
struct data *data = _data; struct data *data = _data;
@ -173,8 +162,6 @@ static int on_source_ready(void *_data, int status)
struct spa_data *datas; struct spa_data *datas;
struct spa_io_buffers *io = &data->source_output[0]; struct spa_io_buffers *io = &data->source_output[0];
handle_events(data);
if (io->status != SPA_STATUS_HAVE_BUFFER || if (io->status != SPA_STATUS_HAVE_BUFFER ||
io->buffer_id > MAX_BUFFERS) io->buffer_id > MAX_BUFFERS)
return -EINVAL; return -EINVAL;
@ -437,14 +424,16 @@ static void *loop(void *user_data)
static void run_async_source(struct data *data) static void run_async_source(struct data *data)
{ {
int res; int res, err;
int err; struct spa_command cmd;
SDL_Event event;
bool running = true;
{ cmd = SPA_NODE_COMMAND_INIT(SPA_NODE_COMMAND_Start);
struct spa_command cmd = SPA_NODE_COMMAND_INIT(SPA_NODE_COMMAND_Start); if ((res = spa_node_send_command(data->source, &cmd)) < 0)
if ((res = spa_node_send_command(data->source, &cmd)) < 0) printf("got error %d\n", res);
printf("got error %d\n", res);
} spa_loop_control_leave(data->control);
data->running = true; data->running = true;
if ((err = pthread_create(&data->thread, NULL, loop, data)) != 0) { if ((err = pthread_create(&data->thread, NULL, loop, data)) != 0) {
@ -452,18 +441,24 @@ static void run_async_source(struct data *data)
data->running = false; data->running = false;
} }
sleep(10000); while (running && SDL_WaitEvent(&event)) {
switch (event.type) {
case SDL_QUIT:
running = false;
break;
}
}
if (data->running) { if (data->running) {
data->running = false; data->running = false;
pthread_join(data->thread, NULL); pthread_join(data->thread, NULL);
} }
{ spa_loop_control_enter(data->control);
struct spa_command cmd = SPA_NODE_COMMAND_INIT(SPA_NODE_COMMAND_Pause);
if ((res = spa_node_send_command(data->source, &cmd)) < 0) cmd = SPA_NODE_COMMAND_INIT(SPA_NODE_COMMAND_Pause);
printf("got error %d\n", res); if ((res = spa_node_send_command(data->source, &cmd)) < 0)
} printf("got error %d\n", res);
} }
int main(int argc, char *argv[]) int main(int argc, char *argv[])
@ -474,6 +469,18 @@ int main(int argc, char *argv[])
struct spa_handle *handle = NULL; struct spa_handle *handle = NULL;
void *iface; void *iface;
if ((res = load_handle(&data, &handle,
PATH "support/libspa-support.so",
SPA_NAME_SUPPORT_SYSTEM)) < 0)
return res;
if ((res = spa_handle_get_interface(handle, SPA_TYPE_INTERFACE_System, &iface)) < 0) {
printf("can't get System interface %d\n", res);
return res;
}
data.system = iface;
data.support[data.n_support++] = SPA_SUPPORT_INIT(SPA_TYPE_INTERFACE_System, data.system);
if ((res = load_handle(&data, &handle, if ((res = load_handle(&data, &handle,
PATH "support/libspa-support.so", PATH "support/libspa-support.so",
SPA_NAME_SUPPORT_LOOP)) < 0) SPA_NAME_SUPPORT_LOOP)) < 0)
@ -490,17 +497,16 @@ int main(int argc, char *argv[])
} }
data.control = iface; data.control = iface;
data.use_buffer = true; data.use_buffer = false;
data.log = &default_log.log; data.log = &default_log.log;
if ((str = getenv("SPA_DEBUG"))) if ((str = getenv("SPA_DEBUG")))
data.log->level = atoi(str); data.log->level = atoi(str);
data.support[0] = SPA_SUPPORT_INIT(SPA_TYPE_INTERFACE_Log, data.log); data.support[data.n_support++] = SPA_SUPPORT_INIT(SPA_TYPE_INTERFACE_Log, data.log);
data.support[1] = SPA_SUPPORT_INIT(SPA_TYPE_INTERFACE_Loop, data.loop); data.support[data.n_support++] = SPA_SUPPORT_INIT(SPA_TYPE_INTERFACE_Loop, data.loop);
data.support[2] = SPA_SUPPORT_INIT(SPA_TYPE_INTERFACE_DataLoop, data.loop); data.support[data.n_support++] = SPA_SUPPORT_INIT(SPA_TYPE_INTERFACE_DataLoop, data.loop);
data.n_support = 3;
if (SDL_Init(SDL_INIT_VIDEO) < 0) { if (SDL_Init(SDL_INIT_VIDEO) < 0) {
printf("can't initialize SDL: %s\n", SDL_GetError()); printf("can't initialize SDL: %s\n", SDL_GetError());
@ -523,7 +529,9 @@ int main(int argc, char *argv[])
return -1; return -1;
} }
spa_loop_control_enter(data.control);
run_async_source(&data); run_async_source(&data);
spa_loop_control_leave(data.control);
SDL_DestroyRenderer(data.renderer); SDL_DestroyRenderer(data.renderer);