[vlc-devel] commit: Changed the prototype of vout_display_SendEventDisplaySize. ( Laurent Aimar )

git version control git at videolan.org
Sun Sep 27 11:54:25 CEST 2009


vlc | branch: master | Laurent Aimar <fenrir at videolan.org> | Sat Sep 26 20:39:47 2009 +0200| [904ef7825caee32772ecbbb9a8706ca9aee54eb7] | committer: Laurent Aimar 

Changed the prototype of vout_display_SendEventDisplaySize.

It is needed to avoid problems with threaded event.

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=904ef7825caee32772ecbbb9a8706ca9aee54eb7
---

 include/vlc_vout_display.h |    6 +++---
 src/video_output/display.c |   27 +++++++++++++++++----------
 2 files changed, 20 insertions(+), 13 deletions(-)

diff --git a/include/vlc_vout_display.h b/include/vlc_vout_display.h
index 5106716..0f8a7a5 100644
--- a/include/vlc_vout_display.h
+++ b/include/vlc_vout_display.h
@@ -174,7 +174,7 @@ enum {
 
     VOUT_DISPLAY_EVENT_FULLSCREEN,
 
-    VOUT_DISPLAY_EVENT_DISPLAY_SIZE,        /* The display size need to change : int i_width, int i_height */
+    VOUT_DISPLAY_EVENT_DISPLAY_SIZE,        /* The display size need to change : int i_width, int i_height, bool is_fullscreen */
 
     /* */
     VOUT_DISPLAY_EVENT_CLOSE,
@@ -315,9 +315,9 @@ static inline void vout_display_SendEvent(vout_display_t *vd, int query, ...)
     va_end(args);
 }
 
-static inline void vout_display_SendEventDisplaySize(vout_display_t *vd, int width, int height)
+static inline void vout_display_SendEventDisplaySize(vout_display_t *vd, int width, int height, bool is_fullscreen)
 {
-    vout_display_SendEvent(vd, VOUT_DISPLAY_EVENT_DISPLAY_SIZE, width, height);
+    vout_display_SendEvent(vd, VOUT_DISPLAY_EVENT_DISPLAY_SIZE, width, height, is_fullscreen);
 }
 static inline void vout_display_SendEventPicturesInvalid(vout_display_t *vd)
 {
diff --git a/src/video_output/display.c b/src/video_output/display.c
index 40c4213..83e3e19 100644
--- a/src/video_output/display.c
+++ b/src/video_output/display.c
@@ -314,6 +314,7 @@ struct vout_display_owner_sys_t {
     bool ch_display_size;
     int  display_width;
     int  display_height;
+    bool display_is_fullscreen;
 
     bool ch_display_filled;
     bool is_display_filled;
@@ -554,12 +555,15 @@ static void VoutDisplayEvent(vout_display_t *vd, int event, va_list args)
     case VOUT_DISPLAY_EVENT_DISPLAY_SIZE: {
         const int width  = (int)va_arg(args, int);
         const int height = (int)va_arg(args, int);
-        msg_Dbg(vd, "VoutDisplayEvent 'resize' %dx%d", width, height);
+        const bool is_fullscreen = (bool)va_arg(args, int);
+        msg_Dbg(vd, "VoutDisplayEvent 'resize' %dx%d %s",
+                width, height, is_fullscreen ? "fullscreen" : "window");
 
         /* */
-        osys->ch_display_size = true;
-        osys->display_width   = width;
-        osys->display_height  = height;
+        osys->ch_display_size       = true;
+        osys->display_width         = width;
+        osys->display_height        = height;
+        osys->display_is_fullscreen = is_fullscreen;
         break;
     }
 
@@ -647,8 +651,10 @@ void vout_ManageDisplay(vout_display_t *vd)
             cfg.display.width  = osys->display_width;
             cfg.display.height = osys->display_height;
 
-            if (vout_display_Control(vd, VOUT_DISPLAY_CHANGE_DISPLAY_SIZE, &cfg)) {
-                msg_Err(vd, "Failed to resize display");
+            if (!cfg.is_fullscreen != !osys->display_is_fullscreen ||
+                vout_display_Control(vd, VOUT_DISPLAY_CHANGE_DISPLAY_SIZE, &cfg)) {
+                if (!cfg.is_fullscreen == !osys->display_is_fullscreen)
+                    msg_Err(vd, "Failed to resize display");
 
                 /* We ignore the resized */
                 osys->display_width  = osys->cfg.display.width;
@@ -657,7 +663,7 @@ void vout_ManageDisplay(vout_display_t *vd)
             osys->cfg.display.width  = osys->display_width;
             osys->cfg.display.height = osys->display_height;
 
-            if (!osys->is_fullscreen) {
+            if (!osys->display_is_fullscreen) {
                 osys->width_saved  = osys->display_width;
                 osys->height_saved = osys->display_height;
             }
@@ -698,9 +704,10 @@ void vout_ManageDisplay(vout_display_t *vd)
                 osys->zoom.num = osys->cfg.zoom.num;
                 osys->zoom.den = osys->cfg.zoom.den;
             } else if (cfg.is_display_filled) {
-                osys->ch_display_size = true;
-                osys->display_width  = (int64_t)vd->source.i_width  * osys->zoom.num / osys->zoom.den;
-                osys->display_height = (int64_t)vd->source.i_height * osys->zoom.num / osys->zoom.den;
+                const int display_width  = (int64_t)vd->source.i_width  * osys->zoom.num / osys->zoom.den;
+                const int display_height = (int64_t)vd->source.i_height * osys->zoom.num / osys->zoom.den;
+
+                vout_display_SendEventDisplaySize(vd, display_width, display_height, osys->cfg.is_fullscreen);
             }
 
             osys->cfg.zoom.num = osys->zoom.num;




More information about the vlc-devel mailing list