Message ID | alpine.LSU.2.20.1806112316430.15513@iq |
---|---|
State | Accepted |
Headers | show |
On Mon, 11 Jun 2018, Marton Balint wrote: > > > On Mon, 11 Jun 2018, Carl Eugen Hoyos wrote: > >> Hi! >> >> Attached patch fixes a crash if SDL sends a keydown event before >> stream and window initialization is finished, ticket #7252. > > Wow, current ffplay code assumes that no keypress or mouse events will come > before the window is shown. Strange thing that SDL2 on IOS is forwarding > input events even without a window... > > So in order to fix this more thoroughly, I suggest the attached patch > instead. Supporting keypresses without a window (e.g. -nodisp mode) might be > possible, but that requires bigger changes... Pushed. Regards, Marton
2018-06-20 22:43 GMT+02:00, Marton Balint <cus@passwd.hu>: > > > On Mon, 11 Jun 2018, Marton Balint wrote: > >> >> >> On Mon, 11 Jun 2018, Carl Eugen Hoyos wrote: >> >>> Hi! >>> >>> Attached patch fixes a crash if SDL sends a keydown event before >>> stream and window initialization is finished, ticket #7252. >> >> Wow, current ffplay code assumes that no keypress or mouse events will >> come >> before the window is shown. Strange thing that SDL2 on IOS is forwarding >> input events even without a window... >> >> So in order to fix this more thoroughly, I suggest the attached patch >> instead. Supporting keypresses without a window (e.g. -nodisp mode) might >> be >> possible, but that requires bigger changes... > > Pushed. Thank you! Carl Eugen
From 23ec72e867f3f25f422d6c1c7298cfcf79b4f113 Mon Sep 17 00:00:00 2001 From: Marton Balint <cus@passwd.hu> Date: Mon, 11 Jun 2018 23:19:37 +0200 Subject: [PATCH] ffplay: ignore keypress events before a window is created Current ffplay code assumes that the read thread is in its main loop before any key events are captured, but apparently on IOS even keypresses without a window are forwared. Fixes ticket #7252. Signed-off-by: Marton Balint <cus@passwd.hu> --- fftools/ffplay.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/fftools/ffplay.c b/fftools/ffplay.c index 84ba6673dc..55cea32cae 100644 --- a/fftools/ffplay.c +++ b/fftools/ffplay.c @@ -3251,15 +3251,14 @@ static void event_loop(VideoState *cur_stream) refresh_loop_wait_event(cur_stream, &event); switch (event.type) { case SDL_KEYDOWN: - if (exit_on_keydown) { + if (exit_on_keydown || event.key.keysym.sym == SDLK_ESCAPE || event.key.keysym.sym == SDLK_q) { do_exit(cur_stream); break; } + // If we don't yet have a window, skip all key events, because read_thread might still be initializing... + if (!cur_stream->width) + continue; switch (event.key.keysym.sym) { - case SDLK_ESCAPE: - case SDLK_q: - do_exit(cur_stream); - break; case SDLK_f: toggle_full_screen(cur_stream); cur_stream->force_refresh = 1; -- 2.16.4