From 637d306a243e83c797f4a818cb0342d9af564843 Mon Sep 17 00:00:00 2001 From: dec05eba Date: Fri, 19 Jul 2024 22:08:04 +0200 Subject: Stop recording when pipewire target window is closed or when pressing close in the desktop environments record button --- src/capture/kms.c | 11 +---------- src/capture/portal.c | 13 ++----------- src/pipewire.c | 12 ++++++++++++ 3 files changed, 15 insertions(+), 21 deletions(-) (limited to 'src') diff --git a/src/capture/kms.c b/src/capture/kms.c index 3e66bdb..f522df3 100644 --- a/src/capture/kms.c +++ b/src/capture/kms.c @@ -25,9 +25,6 @@ typedef struct { typedef struct { gsr_capture_kms_params params; - - bool should_stop; - bool stop_is_error; gsr_kms_client kms_client; gsr_kms_response kms_response; @@ -477,13 +474,7 @@ static int gsr_capture_kms_capture(gsr_capture *cap, AVFrame *frame, gsr_color_c } static bool gsr_capture_kms_should_stop(gsr_capture *cap, bool *err) { - gsr_capture_kms *cap_kms = cap->priv; - if(cap_kms->should_stop) { - if(err) - *err = cap_kms->stop_is_error; - return true; - } - + (void)cap; if(err) *err = false; return false; diff --git a/src/capture/portal.c b/src/capture/portal.c index 5af5163..aa73cd0 100644 --- a/src/capture/portal.c +++ b/src/capture/portal.c @@ -15,9 +15,6 @@ typedef struct { gsr_capture_portal_params params; - bool should_stop; - bool stop_is_error; - unsigned int input_texture_id; unsigned int cursor_texture_id; @@ -328,16 +325,10 @@ static int gsr_capture_portal_capture(gsr_capture *cap, AVFrame *frame, gsr_colo } static bool gsr_capture_portal_should_stop(gsr_capture *cap, bool *err) { - gsr_capture_portal *cap_portal = cap->priv; - if(cap_portal->should_stop) { - if(err) - *err = cap_portal->stop_is_error; - return true; - } - + gsr_capture_portal *self = cap->priv; if(err) *err = false; - return false; + return gsr_pipewire_recording_stopped(&self->pipewire); } static void gsr_capture_portal_capture_end(gsr_capture *cap, AVFrame *frame) { diff --git a/src/pipewire.c b/src/pipewire.c index 985a80a..1828f90 100644 --- a/src/pipewire.c +++ b/src/pipewire.c @@ -246,6 +246,14 @@ static void on_param_changed_cb(void *user_data, uint32_t id, const struct spa_p static void on_state_changed_cb(void *user_data, enum pw_stream_state old, enum pw_stream_state state, const char *error) { (void)old; gsr_pipewire *self = user_data; + if(state == PW_STREAM_STATE_STREAMING) + self->started = true; + + if(self->started && state == PW_STREAM_STATE_PAUSED) { + self->started = false; + self->stopped = true; + } + fprintf(stderr, "gsr info: pipewire: stream %p state: \"%s\" (error: %s)\n", (void*)self->stream, pw_stream_state_as_string(state), error ? error : "none"); @@ -627,3 +635,7 @@ bool gsr_pipewire_map_texture(gsr_pipewire *self, unsigned int texture_id, unsig pthread_mutex_unlock(&self->mutex); return true; } + +bool gsr_pipewire_recording_stopped(gsr_pipewire *self) { + return self->stopped; +} -- cgit v1.2.3