[FFmpeg-devel] ffplay: Don't crash if stream_cycle_channel() is called before initialization

Submitted by Marton Balint on June 11, 2018, 9:31 p.m.

Details

Message ID alpine.LSU.2.20.1806112316430.15513@iq
State New
Headers show

Commit Message

Marton Balint June 11, 2018, 9:31 p.m.
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...

Regards,
Marton

Comments

Marton Balint June 20, 2018, 8:43 p.m.
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
Carl Eugen Hoyos June 20, 2018, 8:44 p.m.
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

Patch hide | download patch | download mbox

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