diff --git a/app/src/screen.c b/app/src/screen.c index a9a48eae..ce2e74bb 100644 --- a/app/src/screen.c +++ b/app/src/screen.c @@ -362,27 +362,17 @@ sc_screen_frame_sink_push(struct sc_frame_sink *sink, const AVFrame *frame) { return sc_video_buffer_push(&screen->vb, frame); } -static void +static bool sc_video_buffer_on_new_frame(struct sc_video_buffer *vb, bool previous_skipped, void *userdata) { (void) vb; struct sc_screen *screen = userdata; - // event_failed implies previous_skipped (the previous frame may not have - // been consumed if the event was not sent) - assert(!screen->event_failed || previous_skipped); - - bool need_new_event; if (previous_skipped) { sc_fps_counter_add_skipped_frame(&screen->fps_counter); // The SC_EVENT_NEW_FRAME triggered for the previous frame will consume - // this new frame instead, unless the previous event failed - need_new_event = screen->event_failed; + // this new frame instead } else { - need_new_event = true; - } - - if (need_new_event) { static SDL_Event new_frame_event = { .type = SC_EVENT_NEW_FRAME, }; @@ -391,11 +381,11 @@ sc_video_buffer_on_new_frame(struct sc_video_buffer *vb, bool previous_skipped, int ret = SDL_PushEvent(&new_frame_event); if (ret < 0) { LOGW("Could not post new frame event: %s", SDL_GetError()); - screen->event_failed = true; - } else { - screen->event_failed = false; + return false; } } + + return true; } bool @@ -405,7 +395,6 @@ sc_screen_init(struct sc_screen *screen, screen->has_frame = false; screen->fullscreen = false; screen->maximized = false; - screen->event_failed = false; screen->mouse_capture_key_pressed = 0; screen->req.x = params->window_x; diff --git a/app/src/screen.h b/app/src/screen.h index 222e418f..0952c79c 100644 --- a/app/src/screen.h +++ b/app/src/screen.h @@ -59,8 +59,6 @@ struct sc_screen { bool maximized; bool mipmaps; - bool event_failed; // in case SDL_PushEvent() returned an error - // To enable/disable mouse capture, a mouse capture key (LALT, LGUI or // RGUI) must be pressed. This variable tracks the pressed capture key. SDL_Keycode mouse_capture_key_pressed; diff --git a/app/src/v4l2_sink.c b/app/src/v4l2_sink.c index ba876b2b..5dfe37bc 100644 --- a/app/src/v4l2_sink.c +++ b/app/src/v4l2_sink.c @@ -141,7 +141,7 @@ run_v4l2_sink(void *data) { return 0; } -static void +static bool sc_video_buffer_on_new_frame(struct sc_video_buffer *vb, bool previous_skipped, void *userdata) { (void) vb; @@ -153,6 +153,8 @@ sc_video_buffer_on_new_frame(struct sc_video_buffer *vb, bool previous_skipped, sc_cond_signal(&vs->cond); sc_mutex_unlock(&vs->mutex); } + + return true; } static bool diff --git a/app/src/video_buffer.c b/app/src/video_buffer.c index 49c01839..7f771179 100644 --- a/app/src/video_buffer.c +++ b/app/src/video_buffer.c @@ -40,8 +40,7 @@ sc_video_buffer_offer(struct sc_video_buffer *vb, const AVFrame *frame) { return false; } - vb->cbs->on_new_frame(vb, previous_skipped, vb->cbs_userdata); - return true; + return vb->cbs->on_new_frame(vb, previous_skipped, vb->cbs_userdata); } static int diff --git a/app/src/video_buffer.h b/app/src/video_buffer.h index 41b09434..d183a484 100644 --- a/app/src/video_buffer.h +++ b/app/src/video_buffer.h @@ -45,7 +45,7 @@ struct sc_video_buffer { }; struct sc_video_buffer_callbacks { - void (*on_new_frame)(struct sc_video_buffer *vb, bool previous_skipped, + bool (*on_new_frame)(struct sc_video_buffer *vb, bool previous_skipped, void *userdata); };