[vlc-devel] [PATCH 15/31] video_output: request the display with a decoder device
Steve Lhomme
robux4 at ycbcr.xyz
Mon Sep 23 17:01:20 CEST 2019
It will turn into a video context once we pass it from the decoder.
We want to make sure when the display module is created it has a chance to use
the same decoder device the decoder used to be created.
---
src/audio_output/filters.c | 2 +-
src/input/decoder.c | 2 +-
src/input/resource.c | 3 ++-
src/input/resource.h | 2 +-
src/video_output/video_output.c | 8 ++++----
src/video_output/vout_internal.h | 4 ++--
src/video_output/vout_wrapper.c | 5 +++--
7 files changed, 14 insertions(+), 12 deletions(-)
diff --git a/src/audio_output/filters.c b/src/audio_output/filters.c
index d2c1a04feb9..d53dcd99f17 100644
--- a/src/audio_output/filters.c
+++ b/src/audio_output/filters.c
@@ -397,7 +397,7 @@ vout_thread_t *aout_filter_GetVout(filter_t *filter, const video_format_t *fmt)
if (vout_HoldDevice(&cfg, NULL) == 0)
{
- if (vout_RequestDisplay(&cfg, NULL) == 0)
+ if (vout_RequestDisplay(&cfg, NULL, NULL) == 0)
{
return vout;
}
diff --git a/src/input/decoder.c b/src/input/decoder.c
index cbc5949f296..6463320b395 100644
--- a/src/input/decoder.c
+++ b/src/input/decoder.c
@@ -637,7 +637,7 @@ static int ModuleThread_UpdateVideoFormat( decoder_t *p_dec )
.dpb_size = dpb_size + p_dec->i_extra_picture_buffers + 1,
.mouse_event = MouseEvent, .mouse_opaque = p_dec,
};
- int res = input_resource_GetDisplay( p_owner->p_resource, &cfg);
+ int res = input_resource_GetDisplay( p_owner->p_resource, p_owner->p_dec_dev, &cfg);
vlc_mutex_lock( &p_owner->lock );
p_owner->fmt.video.i_chroma = p_dec->fmt_out.i_codec;
diff --git a/src/input/resource.c b/src/input/resource.c
index a1e12c84301..4de51e35a15 100644
--- a/src/input/resource.c
+++ b/src/input/resource.c
@@ -440,10 +440,11 @@ out:
}
int input_resource_GetDisplay(input_resource_t *p_resource,
+ vlc_decoder_device *dec_dev,
const vout_configuration_t *cfg)
{
vlc_mutex_lock( &p_resource->lock );
- int res = vout_RequestDisplay(cfg, p_resource->p_input);
+ int res = vout_RequestDisplay(cfg, dec_dev, p_resource->p_input);
if (res != 0) {
input_resource_PutVoutLocked(p_resource, cfg->vout, false);
vlc_mutex_unlock(&p_resource->lock);
diff --git a/src/input/resource.h b/src/input/resource.h
index 07b5ff78603..8640ed91ee8 100644
--- a/src/input/resource.h
+++ b/src/input/resource.h
@@ -41,7 +41,7 @@ vout_thread_t *input_resource_GetVoutHoldDevice(input_resource_t *,
const vout_configuration_t *,
enum vlc_vout_order *order,
vlc_decoder_device **);
-int input_resource_GetDisplay(input_resource_t *, const vout_configuration_t *);
+int input_resource_GetDisplay(input_resource_t *, vlc_decoder_device *dec_dev, const vout_configuration_t *);
void input_resource_PutVout(input_resource_t *, vout_thread_t *);
/**
diff --git a/src/video_output/video_output.c b/src/video_output/video_output.c
index 1cbb84a22ad..ce04e0b3e0e 100644
--- a/src/video_output/video_output.c
+++ b/src/video_output/video_output.c
@@ -1434,7 +1434,7 @@ static void ThreadProcessMouseState(vout_thread_t *vout,
vout->p->mouse_event(m, vout->p->mouse_opaque);
}
-static int vout_Start(vout_thread_t *vout, const vout_configuration_t *cfg)
+static int vout_Start(vout_thread_t *vout, vlc_decoder_device *dec_dev, const vout_configuration_t *cfg)
{
vout_thread_sys_t *sys = vout->p;
assert(!sys->dummy);
@@ -1500,7 +1500,7 @@ static int vout_Start(vout_thread_t *vout, const vout_configuration_t *cfg)
vlc_mutex_lock(&sys->display_lock);
vlc_mutex_unlock(&sys->window_lock);
- sys->display = vout_OpenWrapper(vout, sys->splitter_name, &dcfg);
+ sys->display = vout_OpenWrapper(vout, sys->splitter_name, &dcfg, dec_dev);
if (sys->display == NULL) {
vlc_mutex_unlock(&sys->display_lock);
goto error;
@@ -1942,7 +1942,7 @@ int vout_HoldDevice(const vout_configuration_t *cfg, vlc_decoder_device **pp_dec
return 0;
}
-int vout_RequestDisplay(const vout_configuration_t *cfg, input_thread_t *input)
+int vout_RequestDisplay(const vout_configuration_t *cfg, vlc_decoder_device *dec_dev, input_thread_t *input)
{
vout_thread_t *vout = cfg->vout;
vout_thread_sys_t *sys = vout->p;
@@ -1950,7 +1950,7 @@ int vout_RequestDisplay(const vout_configuration_t *cfg, input_thread_t *input)
if (sys->display != NULL)
return VLC_SUCCESS;
- if (vout_Start(vout, cfg))
+ if (vout_Start(vout, dec_dev, cfg))
{
vlc_mutex_lock(&sys->window_lock);
vout_window_Disable(sys->display_cfg.window);
diff --git a/src/video_output/vout_internal.h b/src/video_output/vout_internal.h
index 01a3e3d9ead..a55679a51dd 100644
--- a/src/video_output/vout_internal.h
+++ b/src/video_output/vout_internal.h
@@ -221,7 +221,7 @@ int vout_HoldDevice(const vout_configuration_t *cfg, vlc_decoder_device **dec_de
* \retval 0 on success
* \retval -1 on error
*/
-int vout_RequestDisplay(const vout_configuration_t *cfg, input_thread_t *input);
+int vout_RequestDisplay(const vout_configuration_t *cfg, vlc_decoder_device *dec_dev, input_thread_t *input);
/**
* Disables a vout.
@@ -269,7 +269,7 @@ void vout_IntfDeinit(vlc_object_t *);
/* */
vout_display_t *vout_OpenWrapper(vout_thread_t *, const char *,
- const vout_display_cfg_t *);
+ const vout_display_cfg_t *, vlc_decoder_device *);
void vout_CloseWrapper(vout_thread_t *, vout_display_t *vd);
/* */
diff --git a/src/video_output/vout_wrapper.c b/src/video_output/vout_wrapper.c
index 80907bcac7d..e906e8cd7cf 100644
--- a/src/video_output/vout_wrapper.c
+++ b/src/video_output/vout_wrapper.c
@@ -55,7 +55,8 @@ static void VoutViewpointMoved(void *sys, const vlc_viewpoint_t *vp)
*
*****************************************************************************/
vout_display_t *vout_OpenWrapper(vout_thread_t *vout,
- const char *splitter_name, const vout_display_cfg_t *cfg)
+ const char *splitter_name, const vout_display_cfg_t *cfg,
+ vlc_decoder_device *dec_device)
{
vout_thread_sys_t *sys = vout->p;
vout_display_t *vd;
@@ -73,7 +74,7 @@ vout_display_t *vout_OpenWrapper(vout_thread_t *vout,
modlist = "splitter,none";
vd = vout_display_New(VLC_OBJECT(vout), &sys->original, cfg,
- sys->dec_device, modlist, &owner);
+ dec_device, modlist, &owner);
free(modlistbuf);
if (vd == NULL)
--
2.17.1
More information about the vlc-devel
mailing list