Patchwork [resend] sdl: Reverse support for video mode setting

login
register
mail settings
Submitter Lei Li
Date Sept. 4, 2013, 9:07 a.m.
Message ID <1378285636-7091-1-git-send-email-lilei@linux.vnet.ibm.com>
Download mbox | patch
Permalink /patch/272542/
State New
Headers show

Comments

Lei Li - Sept. 4, 2013, 9:07 a.m.
Currently, If the setting of video mode failed, qemu will exit. It
should go back to the previous setting if the new screen resolution
failed. This patch fixes LP#1216368, add support to revert to existing
surface for the failure of video mode setting.

Reported-by: Sascha Krissler <sascha@srlabs.de>
Signed-off-by: Lei Li <lilei@linux.vnet.ibm.com>
---
 ui/sdl.c |   23 +++++++++++++++++++----
 1 files changed, 19 insertions(+), 4 deletions(-)
Lei Li - Oct. 24, 2013, 12:21 p.m.
This patch has been confirmed by the reporter himself as
link below,

https://bugs.launchpad.net/qemu/+bug/1216368

It has been on the mailing list for a while, could it be merged? PING...

On 09/04/2013 05:07 PM, Lei Li wrote:
> Currently, If the setting of video mode failed, qemu will exit. It
> should go back to the previous setting if the new screen resolution
> failed. This patch fixes LP#1216368, add support to revert to existing
> surface for the failure of video mode setting.
>
> Reported-by: Sascha Krissler <sascha@srlabs.de>
> Signed-off-by: Lei Li <lilei@linux.vnet.ibm.com>
> ---
>   ui/sdl.c |   23 +++++++++++++++++++----
>   1 files changed, 19 insertions(+), 4 deletions(-)
>
> diff --git a/ui/sdl.c b/ui/sdl.c
> index 39a42d6..9d8583c 100644
> --- a/ui/sdl.c
> +++ b/ui/sdl.c
> @@ -86,6 +86,7 @@ static void sdl_update(DisplayChangeListener *dcl,
>   static void do_sdl_resize(int width, int height, int bpp)
>   {
>       int flags;
> +    SDL_Surface *tmp_screen;
>
>       //    printf("resizing to %d %d\n", w, h);
>
> @@ -98,12 +99,26 @@ static void do_sdl_resize(int width, int height, int bpp)
>       if (gui_noframe)
>           flags |= SDL_NOFRAME;
>
> -    real_screen = SDL_SetVideoMode(width, height, bpp, flags);
> +    tmp_screen = SDL_SetVideoMode(width, height, bpp, flags);
>       if (!real_screen) {
> -	fprintf(stderr, "Could not open SDL display (%dx%dx%d): %s\n", width,
> -		height, bpp, SDL_GetError());
> -        exit(1);
> +        if (!tmp_screen) {
> +            fprintf(stderr, "Could not open SDL display (%dx%dx%d): %s\n",
> +                    width, height, bpp, SDL_GetError());
> +            exit(1);
> +        }
> +    } else {
> +        /*
> +         * Revert to the previous video mode if the change of resizing or
> +         * resolution failed.
> +         */
> +        if (!tmp_screen) {
> +            fprintf(stderr, "Failed to set SDL display (%dx%dx%d): %s\n",
> +                    width, height, bpp, SDL_GetError());
> +            return;
> +        }
>       }
> +
> +    real_screen = tmp_screen;
>   }
>
>   static void sdl_switch(DisplayChangeListener *dcl,
Lei Li - Nov. 6, 2013, 1:31 p.m.
Ping^2

On 10/24/2013 08:21 PM, Lei Li wrote:
> This patch has been confirmed by the reporter himself as
> link below,
>
> https://bugs.launchpad.net/qemu/+bug/1216368
>
> It has been on the mailing list for a while, could it be merged? PING...
>
> On 09/04/2013 05:07 PM, Lei Li wrote:
>> Currently, If the setting of video mode failed, qemu will exit. It
>> should go back to the previous setting if the new screen resolution
>> failed. This patch fixes LP#1216368, add support to revert to existing
>> surface for the failure of video mode setting.
>>
>> Reported-by: Sascha Krissler <sascha@srlabs.de>
>> Signed-off-by: Lei Li <lilei@linux.vnet.ibm.com>
>> ---
>>   ui/sdl.c |   23 +++++++++++++++++++----
>>   1 files changed, 19 insertions(+), 4 deletions(-)
>>
>> diff --git a/ui/sdl.c b/ui/sdl.c
>> index 39a42d6..9d8583c 100644
>> --- a/ui/sdl.c
>> +++ b/ui/sdl.c
>> @@ -86,6 +86,7 @@ static void sdl_update(DisplayChangeListener *dcl,
>>   static void do_sdl_resize(int width, int height, int bpp)
>>   {
>>       int flags;
>> +    SDL_Surface *tmp_screen;
>>
>>       //    printf("resizing to %d %d\n", w, h);
>>
>> @@ -98,12 +99,26 @@ static void do_sdl_resize(int width, int height, 
>> int bpp)
>>       if (gui_noframe)
>>           flags |= SDL_NOFRAME;
>>
>> -    real_screen = SDL_SetVideoMode(width, height, bpp, flags);
>> +    tmp_screen = SDL_SetVideoMode(width, height, bpp, flags);
>>       if (!real_screen) {
>> -    fprintf(stderr, "Could not open SDL display (%dx%dx%d): %s\n", 
>> width,
>> -        height, bpp, SDL_GetError());
>> -        exit(1);
>> +        if (!tmp_screen) {
>> +            fprintf(stderr, "Could not open SDL display (%dx%dx%d): 
>> %s\n",
>> +                    width, height, bpp, SDL_GetError());
>> +            exit(1);
>> +        }
>> +    } else {
>> +        /*
>> +         * Revert to the previous video mode if the change of 
>> resizing or
>> +         * resolution failed.
>> +         */
>> +        if (!tmp_screen) {
>> +            fprintf(stderr, "Failed to set SDL display (%dx%dx%d): 
>> %s\n",
>> +                    width, height, bpp, SDL_GetError());
>> +            return;
>> +        }
>>       }
>> +
>> +    real_screen = tmp_screen;
>>   }
>>
>>   static void sdl_switch(DisplayChangeListener *dcl,
>
>
Paolo Bonzini - Nov. 6, 2013, 2:16 p.m.
Il 06/11/2013 14:31, Lei Li ha scritto:
> Ping^2
> 
> On 10/24/2013 08:21 PM, Lei Li wrote:
>> This patch has been confirmed by the reporter himself as
>> link below,
>>
>> https://bugs.launchpad.net/qemu/+bug/1216368
>>
>> It has been on the mailing list for a while, could it be merged? PING...
>>
>> On 09/04/2013 05:07 PM, Lei Li wrote:
>>> Currently, If the setting of video mode failed, qemu will exit. It
>>> should go back to the previous setting if the new screen resolution
>>> failed. This patch fixes LP#1216368, add support to revert to existing
>>> surface for the failure of video mode setting.
>>>
>>> Reported-by: Sascha Krissler <sascha@srlabs.de>
>>> Signed-off-by: Lei Li <lilei@linux.vnet.ibm.com>
>>> ---
>>>   ui/sdl.c |   23 +++++++++++++++++++----
>>>   1 files changed, 19 insertions(+), 4 deletions(-)
>>>
>>> diff --git a/ui/sdl.c b/ui/sdl.c
>>> index 39a42d6..9d8583c 100644
>>> --- a/ui/sdl.c
>>> +++ b/ui/sdl.c
>>> @@ -86,6 +86,7 @@ static void sdl_update(DisplayChangeListener *dcl,
>>>   static void do_sdl_resize(int width, int height, int bpp)
>>>   {
>>>       int flags;
>>> +    SDL_Surface *tmp_screen;
>>>
>>>       //    printf("resizing to %d %d\n", w, h);
>>>
>>> @@ -98,12 +99,26 @@ static void do_sdl_resize(int width, int height,
>>> int bpp)
>>>       if (gui_noframe)
>>>           flags |= SDL_NOFRAME;
>>>
>>> -    real_screen = SDL_SetVideoMode(width, height, bpp, flags);
>>> +    tmp_screen = SDL_SetVideoMode(width, height, bpp, flags);
>>>       if (!real_screen) {
>>> -    fprintf(stderr, "Could not open SDL display (%dx%dx%d): %s\n",
>>> width,
>>> -        height, bpp, SDL_GetError());
>>> -        exit(1);
>>> +        if (!tmp_screen) {
>>> +            fprintf(stderr, "Could not open SDL display (%dx%dx%d):
>>> %s\n",
>>> +                    width, height, bpp, SDL_GetError());
>>> +            exit(1);
>>> +        }
>>> +    } else {
>>> +        /*
>>> +         * Revert to the previous video mode if the change of
>>> resizing or
>>> +         * resolution failed.
>>> +         */
>>> +        if (!tmp_screen) {
>>> +            fprintf(stderr, "Failed to set SDL display (%dx%dx%d):
>>> %s\n",
>>> +                    width, height, bpp, SDL_GetError());
>>> +            return;
>>> +        }
>>>       }
>>> +
>>> +    real_screen = tmp_screen;
>>>   }
>>>
>>>   static void sdl_switch(DisplayChangeListener *dcl,
>>
>>
> 
> 

Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>

Patch

diff --git a/ui/sdl.c b/ui/sdl.c
index 39a42d6..9d8583c 100644
--- a/ui/sdl.c
+++ b/ui/sdl.c
@@ -86,6 +86,7 @@  static void sdl_update(DisplayChangeListener *dcl,
 static void do_sdl_resize(int width, int height, int bpp)
 {
     int flags;
+    SDL_Surface *tmp_screen;
 
     //    printf("resizing to %d %d\n", w, h);
 
@@ -98,12 +99,26 @@  static void do_sdl_resize(int width, int height, int bpp)
     if (gui_noframe)
         flags |= SDL_NOFRAME;
 
-    real_screen = SDL_SetVideoMode(width, height, bpp, flags);
+    tmp_screen = SDL_SetVideoMode(width, height, bpp, flags);
     if (!real_screen) {
-	fprintf(stderr, "Could not open SDL display (%dx%dx%d): %s\n", width, 
-		height, bpp, SDL_GetError());
-        exit(1);
+        if (!tmp_screen) {
+            fprintf(stderr, "Could not open SDL display (%dx%dx%d): %s\n",
+                    width, height, bpp, SDL_GetError());
+            exit(1);
+        }
+    } else {
+        /*
+         * Revert to the previous video mode if the change of resizing or
+         * resolution failed.
+         */
+        if (!tmp_screen) {
+            fprintf(stderr, "Failed to set SDL display (%dx%dx%d): %s\n",
+                    width, height, bpp, SDL_GetError());
+            return;
+        }
     }
+
+    real_screen = tmp_screen;
 }
 
 static void sdl_switch(DisplayChangeListener *dcl,