[vlc-commits] display: don't store the dummy context in the display anymore

Steve Lhomme git at videolan.org
Wed Oct 9 10:15:58 CEST 2019


vlc | branch: master | Steve Lhomme <robux4 at ycbcr.xyz> | Wed Sep 25 15:07:48 2019 +0200| [3afde6f125868f850a275decced6182cbf77c941] | committer: Steve Lhomme

display: don't store the dummy context in the display anymore

Use the one from the vout thread if it exists. We create one unconditionally
for now not to break the current VAAPI implementation.

Later the video context will come from the decoder (if any).

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

 include/vlc_vout_display.h      |  2 +-
 modules/video_output/splitter.c |  4 ++--
 src/input/resource.c            |  4 +++-
 src/video_output/display.c      | 15 +++------------
 src/video_output/vout_wrapper.c |  4 ++--
 5 files changed, 11 insertions(+), 18 deletions(-)

diff --git a/include/vlc_vout_display.h b/include/vlc_vout_display.h
index 80f813ba87..1a6afe0da2 100644
--- a/include/vlc_vout_display.h
+++ b/include/vlc_vout_display.h
@@ -309,7 +309,7 @@ struct vout_display_t {
 VLC_API
 vout_display_t *vout_display_New(vlc_object_t *, const video_format_t *,
     const vout_display_cfg_t *, const char *module,
-    const vout_display_owner_t *);
+    vlc_decoder_device *, const vout_display_owner_t *);
 
 /**
  * Destroys a video output display.
diff --git a/modules/video_output/splitter.c b/modules/video_output/splitter.c
index be4d7916e8..cf05cd8b8f 100644
--- a/modules/video_output/splitter.c
+++ b/modules/video_output/splitter.c
@@ -290,7 +290,7 @@ static int vlc_vidsplit_Open(vout_display_t *vd,
 
         vdcfg.window = part->window;
         vout_display_t *display = vout_display_New(obj, &output->fmt, &vdcfg,
-                                                   modname, NULL);
+                                                   modname, ctx->device, NULL);
         if (display == NULL) {
             vout_window_Disable(part->window);
             vout_window_Delete(part->window);
@@ -310,7 +310,7 @@ static int vlc_vidsplit_Open(vout_display_t *vd,
     vd->display = vlc_vidsplit_Display;
     vd->control = vlc_vidsplit_Control;
     vd->close = vlc_vidsplit_Close;
-    (void) fmtp; (void) ctx;
+    (void) fmtp;
     return VLC_SUCCESS;
 }
 
diff --git a/src/input/resource.c b/src/input/resource.c
index 46f2f339ab..0c9693fb9e 100644
--- a/src/input/resource.c
+++ b/src/input/resource.c
@@ -425,7 +425,9 @@ vout_thread_t *input_resource_GetVout(input_resource_t *p_resource,
     }
 #endif
 
-    if (vout_Request(cfg, NULL, p_resource->p_input)) {
+    vlc_decoder_device *dec_dev = vout_GetDevice(cfg);
+
+    if (vout_Request(cfg, dec_dev, p_resource->p_input)) {
         input_resource_PutVoutLocked(p_resource, cfg->vout, false);
         vlc_mutex_unlock(&p_resource->lock);
         return NULL;
diff --git a/src/video_output/display.c b/src/video_output/display.c
index e95e9539f1..9051eb5248 100644
--- a/src/video_output/display.c
+++ b/src/video_output/display.c
@@ -286,9 +286,6 @@ typedef struct {
     atomic_bool reset_pictures;
 #endif
     picture_pool_t *pool;
-
-    /* temporary: must come from decoder module */
-    vlc_video_context video_context;
 } vout_display_priv_t;
 
 static const struct filter_video_callbacks vout_display_filter_cbs = {
@@ -734,6 +731,7 @@ vout_display_t *vout_display_New(vlc_object_t *parent,
                                  const video_format_t *source,
                                  const vout_display_cfg_t *cfg,
                                  const char *module,
+                                 vlc_decoder_device *dec_device,
                                  const vout_display_owner_t *owner)
 {
     vout_display_priv_t *osys = vlc_custom_create(parent, sizeof (*osys),
@@ -772,13 +770,11 @@ vout_display_t *vout_display_New(vlc_object_t *parent,
     if (owner)
         vd->owner = *owner;
 
-    osys->video_context.device = vlc_decoder_device_Create(osys->cfg.window);
-    vlc_video_context *video_context = osys->video_context.device ?
-        &osys->video_context : NULL;
+    vlc_video_context fake_vtcx = { .device = dec_device };
 
     if (vlc_module_load(vd, "vout display", module, module && *module != '\0',
                         vout_display_start, vd, &osys->cfg, &vd->fmt,
-                        video_context) == NULL)
+                        &fake_vtcx) == NULL)
         goto error;
 
 #if defined(__OS2__)
@@ -803,8 +799,6 @@ vout_display_t *vout_display_New(vlc_object_t *parent,
     return vd;
 error:
     video_format_Clean(&vd->source);
-    if (osys->video_context.device)
-        vlc_decoder_device_Release(osys->video_context.device);
     vlc_object_delete(vd);
     return NULL;
 }
@@ -823,9 +817,6 @@ void vout_display_Delete(vout_display_t *vd)
         vd->close(vd);
     vlc_objres_clear(VLC_OBJECT(vd));
 
-    if (osys->video_context.device)
-        vlc_decoder_device_Release(osys->video_context.device);
-
     video_format_Clean(&vd->source);
     video_format_Clean(&vd->fmt);
     vlc_object_delete(vd);
diff --git a/src/video_output/vout_wrapper.c b/src/video_output/vout_wrapper.c
index deead4b381..db2d36e67c 100644
--- a/src/video_output/vout_wrapper.c
+++ b/src/video_output/vout_wrapper.c
@@ -73,8 +73,8 @@ vout_display_t *vout_OpenWrapper(vout_thread_t *vout,
     else
         modlist = "splitter,none";
 
-    vd = vout_display_New(VLC_OBJECT(vout), &sys->original, cfg, modlist,
-                          &owner);
+    vd = vout_display_New(VLC_OBJECT(vout), &sys->original, cfg,
+                          modlist, sys->dec_device, &owner);
     free(modlistbuf);
 
     if (vd == NULL)



More information about the vlc-commits mailing list