[vlc-devel] [PATCH 02/13] resource: allow to create a vout without config

Thomas Guillem thomas at gllm.fr
Mon Apr 15 15:50:47 CEST 2019


---
 src/input/resource.c | 25 ++++++++++++++++---------
 1 file changed, 16 insertions(+), 9 deletions(-)

diff --git a/src/input/resource.c b/src/input/resource.c
index 0812db6fe6..01a2889655 100644
--- a/src/input/resource.c
+++ b/src/input/resource.c
@@ -372,21 +372,16 @@ void input_resource_SetInput( input_resource_t *p_resource, input_thread_t *p_in
 vout_thread_t *input_resource_GetVout(input_resource_t *p_resource,
                                       const vout_configuration_t *cfg)
 {
-    vout_configuration_t cfg_buf;
     vout_thread_t *vout;
 
-    assert(cfg != NULL);
-    assert(cfg->fmt != NULL);
     vlc_mutex_lock( &p_resource->lock );
 
-    if (cfg->vout == NULL) {
-        cfg_buf = *cfg;
-        cfg_buf.vout = p_resource->p_vout_free;
+    if (cfg == NULL || cfg->vout == NULL) {
+        vout = p_resource->p_vout_free;
         p_resource->p_vout_free = NULL;
-        cfg = &cfg_buf;
 
-        if (cfg_buf.vout == NULL) {
-            cfg_buf.vout = vout = vout_Create(p_resource->p_parent);
+        if (vout == NULL) {
+            vout = vout_Create(p_resource->p_parent);
             if (vout == NULL)
                 goto out;
         } else
@@ -397,8 +392,20 @@ vout_thread_t *input_resource_GetVout(input_resource_t *p_resource,
         vlc_mutex_lock(&p_resource->lock_hold);
         TAB_REMOVE(p_resource->i_vout, p_resource->pp_vout, cfg->vout);
         vlc_mutex_unlock(&p_resource->lock_hold);
+        vout = cfg->vout;
+    }
+
+    if (!cfg) {
+        vlc_mutex_unlock(&p_resource->lock);
+        return vout;
     }
 
+    vout_configuration_t cfg_buf = *cfg;
+    cfg_buf.vout = vout;
+    cfg = &cfg_buf;
+
+    assert(cfg->fmt != NULL);
+
     if (vout_Request(cfg, p_resource->p_input)) {
         vlc_mutex_unlock(&p_resource->lock);
         input_resource_PutVout(p_resource, cfg->vout);
-- 
2.20.1



More information about the vlc-devel mailing list