[vlc-commits] vout: ignore the display configuration when stopping

Rémi Denis-Courmont git at videolan.org
Sat Jan 26 19:51:05 CET 2019


vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Thu Jan 24 22:55:03 2019 +0200| [14fd28fc1c7f7987ddf46ca5226fa1864005d954] | committer: Rémi Denis-Courmont

vout: ignore the display configuration when stopping

Each parameter generally fell in one of three category:
1) parameter that could not change:
   - window,
   - alignement,
   - pixel aspect ratio;
2) parameter whose value was ignored:
   - window size;
3) parameter whose value was actually saved from the old display
   and restored to the new display:
   - fill flag,
   - zoom,
   - viewpoint.

The last three are now correctly tracked in the vout configuration,
so they no longer need to be retrieved from the display being stopped.
(As a side benefit, the parameter can be tuned even if the vout is
inactive.)

This addresses the FIXME from c75fafe4ec348154a6e07c324dbe62c1c23a7149.

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

 src/video_output/video_output.c | 30 +++++++++++-------------------
 1 file changed, 11 insertions(+), 19 deletions(-)

diff --git a/src/video_output/video_output.c b/src/video_output/video_output.c
index 8a21d40983..b02fbbe89d 100644
--- a/src/video_output/video_output.c
+++ b/src/video_output/video_output.c
@@ -1672,28 +1672,20 @@ static int ThreadReinit(vout_thread_t *vout,
 
     vout_display_cfg_t dcfg = { };
 
-    ThreadStop(vout, &dcfg);
+    ThreadStop(vout, NULL);
 
     vout_ReinitInterlacingSupport(vout);
 
-#if defined(_WIN32) || defined(__OS2__)
-    if (!dcfg.is_fullscreen)
-#endif
-    {
-        dcfg.display.width  = 0;
-        dcfg.display.height = 0;
-    }
-
-    /* FIXME current vout "variables" are not in sync here anymore
-     * and I am not sure what to do */
-    if (dcfg.display.sar.num <= 0 || dcfg.display.sar.den <= 0) {
-        dcfg.display.sar.num = 1;
-        dcfg.display.sar.den = 1;
-    }
-    if (dcfg.zoom.num == 0 || dcfg.zoom.den == 0) {
-        dcfg.zoom.num = 1;
-        dcfg.zoom.den = 1;
-    }
+    vlc_mutex_lock(&vout->p->window_lock);
+    dcfg = vout->p->display_cfg;
+    /* Any configuration change after unlocking will involve a control request
+     * that will be processed later. There may also be some pending control
+     * requests for configuration change already visible in display_cfg,
+     * leading to harmless albeit useless control request processing.
+     *
+     * TODO: display lock separate from window lock.
+     */
+    vlc_mutex_unlock(&vout->p->window_lock);
 
     video_format_Clean(&vout->p->original);
     vout->p->original = original;



More information about the vlc-commits mailing list