mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-04 13:30:12 -05:00
examples: add signal handler for clean exit
This commit is contained in:
parent
197ffe32ba
commit
33cd2495b8
2 changed files with 21 additions and 6 deletions
|
|
@ -24,14 +24,13 @@
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <time.h>
|
#include <signal.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <sys/mman.h>
|
#include <sys/mman.h>
|
||||||
|
|
||||||
#include <spa/param/video/format-utils.h>
|
#include <spa/param/video/format-utils.h>
|
||||||
#include <spa/param/props.h>
|
|
||||||
|
|
||||||
#include <pipewire/pipewire.h>
|
#include <pipewire/pipewire.h>
|
||||||
|
|
||||||
|
|
@ -349,6 +348,12 @@ static const struct pw_stream_events stream_events = {
|
||||||
.remove_buffer = on_stream_remove_buffer,
|
.remove_buffer = on_stream_remove_buffer,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static void do_quit(void *userdata, int signal_number)
|
||||||
|
{
|
||||||
|
struct data *data = userdata;
|
||||||
|
pw_main_loop_quit(data->loop);
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
struct data data = { 0, };
|
struct data data = { 0, };
|
||||||
|
|
@ -361,6 +366,10 @@ int main(int argc, char *argv[])
|
||||||
/* create a main loop */
|
/* create a main loop */
|
||||||
data.loop = pw_main_loop_new(NULL);
|
data.loop = pw_main_loop_new(NULL);
|
||||||
|
|
||||||
|
/* install some handlers to exit nicely */
|
||||||
|
pw_loop_add_signal(pw_main_loop_get_loop(data.loop), SIGINT, do_quit, &data);
|
||||||
|
pw_loop_add_signal(pw_main_loop_get_loop(data.loop), SIGTERM, do_quit, &data);
|
||||||
|
|
||||||
/* create a simple stream, the simple stream manages the core
|
/* create a simple stream, the simple stream manages the core
|
||||||
* object for you if you don't want to deal with them.
|
* object for you if you don't want to deal with them.
|
||||||
*
|
*
|
||||||
|
|
@ -409,7 +418,7 @@ int main(int argc, char *argv[])
|
||||||
* the server. */
|
* the server. */
|
||||||
pw_stream_connect(data.stream,
|
pw_stream_connect(data.stream,
|
||||||
PW_DIRECTION_OUTPUT,
|
PW_DIRECTION_OUTPUT,
|
||||||
PW_ID_ANY,
|
PW_ID_ANY, /* link to any node */
|
||||||
PW_STREAM_FLAG_DRIVER |
|
PW_STREAM_FLAG_DRIVER |
|
||||||
PW_STREAM_FLAG_ALLOC_BUFFERS,
|
PW_STREAM_FLAG_ALLOC_BUFFERS,
|
||||||
params, 1);
|
params, 1);
|
||||||
|
|
@ -419,6 +428,7 @@ int main(int argc, char *argv[])
|
||||||
|
|
||||||
pw_stream_destroy(data.stream);
|
pw_stream_destroy(data.stream);
|
||||||
pw_main_loop_destroy(data.loop);
|
pw_main_loop_destroy(data.loop);
|
||||||
|
pw_deinit();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -61,6 +61,7 @@ struct data {
|
||||||
|
|
||||||
double crop;
|
double crop;
|
||||||
double accumulator;
|
double accumulator;
|
||||||
|
int res;
|
||||||
};
|
};
|
||||||
|
|
||||||
static void draw_elipse(uint32_t *dst, int width, int height, uint32_t color)
|
static void draw_elipse(uint32_t *dst, int width, int height, uint32_t color)
|
||||||
|
|
@ -296,8 +297,11 @@ int main(int argc, char *argv[])
|
||||||
data.timer = pw_loop_add_timer(pw_main_loop_get_loop(data.loop), on_timeout, &data);
|
data.timer = pw_loop_add_timer(pw_main_loop_get_loop(data.loop), on_timeout, &data);
|
||||||
|
|
||||||
data.core = pw_context_connect(data.context, NULL, 0);
|
data.core = pw_context_connect(data.context, NULL, 0);
|
||||||
if (data.core == NULL)
|
if (data.core == NULL) {
|
||||||
return -1;
|
fprintf(stderr, "can't connect: %m\n");
|
||||||
|
data.res = -errno;
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
data.stream = pw_stream_new(data.core, "video-src",
|
data.stream = pw_stream_new(data.core, "video-src",
|
||||||
pw_properties_new(
|
pw_properties_new(
|
||||||
|
|
@ -329,9 +333,10 @@ int main(int argc, char *argv[])
|
||||||
|
|
||||||
pw_main_loop_run(data.loop);
|
pw_main_loop_run(data.loop);
|
||||||
|
|
||||||
|
cleanup:
|
||||||
pw_context_destroy(data.context);
|
pw_context_destroy(data.context);
|
||||||
pw_main_loop_destroy(data.loop);
|
pw_main_loop_destroy(data.loop);
|
||||||
pw_deinit();
|
pw_deinit();
|
||||||
|
|
||||||
return 0;
|
return data.res;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue