Compare commits
1 Commits
install.2
...
push_event
Author | SHA1 | Date | |
---|---|---|---|
b790e15ad6 |
@ -62,7 +62,10 @@ BOOL WINAPI windows_ctrl_handler(DWORD ctrl_type) {
|
|||||||
if (ctrl_type == CTRL_C_EVENT) {
|
if (ctrl_type == CTRL_C_EVENT) {
|
||||||
SDL_Event event;
|
SDL_Event event;
|
||||||
event.type = SDL_QUIT;
|
event.type = SDL_QUIT;
|
||||||
SDL_PushEvent(&event);
|
int ret = SDL_PushEvent(&event);
|
||||||
|
if (ret < 0) {
|
||||||
|
LOGW("Could not post SDL_QUIT event: %s", SDL_GetError());
|
||||||
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@ -250,7 +253,11 @@ stream_on_eos(struct stream *stream, void *userdata) {
|
|||||||
|
|
||||||
SDL_Event stop_event;
|
SDL_Event stop_event;
|
||||||
stop_event.type = EVENT_STREAM_STOPPED;
|
stop_event.type = EVENT_STREAM_STOPPED;
|
||||||
SDL_PushEvent(&stop_event);
|
int ret = SDL_PushEvent(&stop_event);
|
||||||
|
if (ret < 0) {
|
||||||
|
LOGE("Could not post stream stopped event: %s", SDL_GetError());
|
||||||
|
// XXX What could we do?
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
|
@ -282,17 +282,32 @@ sc_video_buffer_on_new_frame(struct sc_video_buffer *vb, bool previous_skipped,
|
|||||||
(void) vb;
|
(void) vb;
|
||||||
struct screen *screen = userdata;
|
struct 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) {
|
if (previous_skipped) {
|
||||||
fps_counter_add_skipped_frame(&screen->fps_counter);
|
fps_counter_add_skipped_frame(&screen->fps_counter);
|
||||||
// The EVENT_NEW_FRAME triggered for the previous frame will consume
|
// The EVENT_NEW_FRAME triggered for the previous frame will consume
|
||||||
// this new frame instead
|
// this new frame instead, unless the previous event failed
|
||||||
|
need_new_event = screen->event_failed;
|
||||||
} else {
|
} else {
|
||||||
|
need_new_event = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (need_new_event) {
|
||||||
static SDL_Event new_frame_event = {
|
static SDL_Event new_frame_event = {
|
||||||
.type = EVENT_NEW_FRAME,
|
.type = EVENT_NEW_FRAME,
|
||||||
};
|
};
|
||||||
|
|
||||||
// Post the event on the UI thread
|
// Post the event on the UI thread
|
||||||
SDL_PushEvent(&new_frame_event);
|
if (SDL_PushEvent(&new_frame_event) < 0) {
|
||||||
|
LOGW("Could not post new frame event: %s", SDL_GetError());
|
||||||
|
screen->event_failed = true;
|
||||||
|
} else {
|
||||||
|
screen->event_failed = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -302,6 +317,7 @@ screen_init(struct screen *screen, const struct screen_params *params) {
|
|||||||
screen->has_frame = false;
|
screen->has_frame = false;
|
||||||
screen->fullscreen = false;
|
screen->fullscreen = false;
|
||||||
screen->maximized = false;
|
screen->maximized = false;
|
||||||
|
screen->event_failed = false;
|
||||||
|
|
||||||
static const struct sc_video_buffer_callbacks cbs = {
|
static const struct sc_video_buffer_callbacks cbs = {
|
||||||
.on_new_frame = sc_video_buffer_on_new_frame,
|
.on_new_frame = sc_video_buffer_on_new_frame,
|
||||||
|
@ -44,6 +44,8 @@ struct screen {
|
|||||||
bool maximized;
|
bool maximized;
|
||||||
bool mipmaps;
|
bool mipmaps;
|
||||||
|
|
||||||
|
bool event_failed; // in case SDL_PushEvent() returned an error
|
||||||
|
|
||||||
AVFrame *frame;
|
AVFrame *frame;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user