[vlc-commits] splitter: wall: fix incorrect sizes

Victorien Le Couviour--Tuffet git at videolan.org
Sun Aug 6 22:05:46 CEST 2017


vlc | branch: master | Victorien Le Couviour--Tuffet <victorien.lecouviour.tuffet at gmail.com> | Fri Aug  4 19:40:58 2017 +0200| [dcc1b6e26eed4716271d62139fdd7389b58d21d3] | committer: Jean-Baptiste Kempf

splitter: wall: fix incorrect sizes

The computations must not be done on the buffer size but on the video one.
Otherwise, we might end up with the sum of all output sizes bigger than the
video itself, which results in a green strip at the bottom of the lowest
outputs, and potentially incorrect display for all of them (with bad width).

Signed-off-by: Jean-Baptiste Kempf <jb at videolan.org>

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

 modules/video_splitter/wall.c | 28 ++++++++++++++--------------
 1 file changed, 14 insertions(+), 14 deletions(-)

diff --git a/modules/video_splitter/wall.c b/modules/video_splitter/wall.c
index e234ca3622..ca19eac4dc 100644
--- a/modules/video_splitter/wall.c
+++ b/modules/video_splitter/wall.c
@@ -191,10 +191,10 @@ static int Open( vlc_object_t *p_this )
         i_aspect = 4 * VOUT_ASPECT_FACTOR / 3;
 
     /* Compute placements/size of the windows */
-    const unsigned w1 = ( p_splitter->fmt.i_width / p_sys->i_col ) & ~1;
+    const unsigned w1 = ( p_splitter->fmt.i_visible_width / p_sys->i_col ) & ~1;
     const unsigned h1 = ( w1 * VOUT_ASPECT_FACTOR / i_aspect ) & ~1;
 
-    const unsigned h2 = ( p_splitter->fmt.i_height / p_sys->i_row ) & ~1;
+    const unsigned h2 = ( p_splitter->fmt.i_visible_height / p_sys->i_row ) & ~1;
     const unsigned w2 = ( h2 * i_aspect / VOUT_ASPECT_FACTOR ) & ~1;
 
     unsigned i_target_width;
@@ -204,23 +204,23 @@ static int Open( vlc_object_t *p_this )
     bool b_vstart_rounded;
     bool b_hstart_rounded;
 
-    if( h1 * p_sys->i_row < p_splitter->fmt.i_height )
+    if( h1 * p_sys->i_row < p_splitter->fmt.i_visible_height )
     {
         i_target_width = w2;
         i_target_height = h2;
 
         i_vstart = 0;
         b_vstart_rounded = false;
-        i_vend = p_splitter->fmt.i_height;
+        i_vend = p_splitter->fmt.i_visible_height;
 
         unsigned i_tmp = i_target_width * p_sys->i_col;
         while( i_tmp < p_splitter->fmt.i_width )
             i_tmp += p_sys->i_col;
 
-        i_hstart = (( i_tmp - p_splitter->fmt.i_width ) / 2)&~1;
-        b_hstart_rounded  = ( ( i_tmp - p_splitter->fmt.i_width ) % 2 ) ||
-            ( ( ( i_tmp - p_splitter->fmt.i_width ) / 2 ) & 1 );
-        i_hend = i_hstart + p_splitter->fmt.i_width;
+        i_hstart = (( i_tmp - p_splitter->fmt.i_visible_width ) / 2)&~1;
+        b_hstart_rounded  = ( ( i_tmp - p_splitter->fmt.i_visible_width ) % 2 ) ||
+            ( ( ( i_tmp - p_splitter->fmt.i_visible_width ) / 2 ) & 1 );
+        i_hend = i_hstart + p_splitter->fmt.i_visible_width;
     }
     else
     {
@@ -229,16 +229,16 @@ static int Open( vlc_object_t *p_this )
 
         i_hstart = 0;
         b_hstart_rounded = false;
-        i_hend = p_splitter->fmt.i_width;
+        i_hend = p_splitter->fmt.i_visible_width;
 
         unsigned i_tmp = i_target_height * p_sys->i_row;
-        while( i_tmp < p_splitter->fmt.i_height )
+        while( i_tmp < p_splitter->fmt.i_visible_height )
             i_tmp += p_sys->i_row;
 
-        i_vstart = ( ( i_tmp - p_splitter->fmt.i_height ) / 2 ) & ~1;
-        b_vstart_rounded  = ( ( i_tmp - p_splitter->fmt.i_height ) % 2 ) ||
-            ( ( ( i_tmp - p_splitter->fmt.i_height ) / 2 ) & 1 );
-        i_vend = i_vstart + p_splitter->fmt.i_height;
+        i_vstart = ( ( i_tmp - p_splitter->fmt.i_visible_height ) / 2 ) & ~1;
+        b_vstart_rounded  = ( ( i_tmp - p_splitter->fmt.i_visible_height ) % 2 ) ||
+            ( ( ( i_tmp - p_splitter->fmt.i_visible_height ) / 2 ) & 1 );
+        i_vend = i_vstart + p_splitter->fmt.i_visible_height;
     }
     msg_Dbg( p_splitter, "target resolution %dx%d", i_target_width, i_target_height );
     msg_Dbg( p_splitter, "target window (%d,%d)-(%d,%d)", i_hstart,i_vstart,i_hend,i_vend );



More information about the vlc-commits mailing list