vlc | branch: master | Steve Lhomme <[email protected]> | Mon Jul 1 14:03:18 2019 +0200| [0f755cd584d88e05f3a16f801ae2581046d02590] | committer: Steve Lhomme
input: resource: split input_resource_GetVout() So we can create the display separately, when the video context will be created. The first call creates/gets the vout and the decoder device. The other call creates/gets the display module. > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=0f755cd584d88e05f3a16f801ae2581046d02590 --- src/input/decoder.c | 52 ++++++++++++++++++++++++++++++---------------------- src/input/resource.c | 23 ++++++++++++++++------- src/input/resource.h | 1 + 3 files changed, 47 insertions(+), 29 deletions(-) diff --git a/src/input/decoder.c b/src/input/decoder.c index d3fa78ea1a..f46ad07c6a 100644 --- a/src/input/decoder.c +++ b/src/input/decoder.c @@ -523,36 +523,44 @@ static int CreateVoutIfNeeded(struct decoder_owner *p_owner) p_owner->p_vout = NULL; // the DecoderThread should not use the old vout anymore vlc_mutex_unlock( &p_owner->lock ); - unsigned dpb_size; - switch( p_dec->fmt_in.i_codec ) - { - case VLC_CODEC_HEVC: - case VLC_CODEC_H264: - case VLC_CODEC_DIRAC: /* FIXME valid ? */ - dpb_size = 18; - break; - case VLC_CODEC_AV1: - dpb_size = 10; - break; - case VLC_CODEC_VP5: - case VLC_CODEC_VP6: - case VLC_CODEC_VP6F: - case VLC_CODEC_VP8: - dpb_size = 3; - break; - default: - dpb_size = 2; - break; - } enum vlc_vout_order order; vout_configuration_t cfg = { .vout = p_vout, .clock = p_owner->p_clock, .fmt = &fmt, - .dpb_size = dpb_size + p_dec->i_extra_picture_buffers + 1, .mouse_event = MouseEvent, .mouse_opaque = p_dec }; vlc_decoder_device *dec_dev = NULL; p_vout = input_resource_GetVoutDecoderDevice( p_owner->p_resource, &cfg, &order, &dec_dev ); + if (p_vout) + { + unsigned dpb_size; + switch( p_dec->fmt_in.i_codec ) + { + case VLC_CODEC_HEVC: + case VLC_CODEC_H264: + case VLC_CODEC_DIRAC: /* FIXME valid ? */ + dpb_size = 18; + break; + case VLC_CODEC_AV1: + dpb_size = 10; + break; + case VLC_CODEC_VP5: + case VLC_CODEC_VP6: + case VLC_CODEC_VP6F: + case VLC_CODEC_VP8: + dpb_size = 3; + break; + default: + dpb_size = 2; + break; + } + cfg.dpb_size = dpb_size + p_dec->i_extra_picture_buffers + 1; + cfg.vout = p_vout; + if (input_resource_ReconfigureVout( p_owner->p_resource, dec_dev, &cfg) != 0) + { + p_vout = NULL; + } + } if (p_vout) decoder_Notify(p_owner, on_vout_added, p_vout, order); diff --git a/src/input/resource.c b/src/input/resource.c index 71cbbda2f6..21a25dd059 100644 --- a/src/input/resource.c +++ b/src/input/resource.c @@ -431,14 +431,25 @@ vout_thread_t *input_resource_GetVoutDecoderDevice(input_resource_t *p_resource, *pp_dec_dev = vout_GetDevice(cfg); } - if (vout_Request(cfg, pp_dec_dev ? *pp_dec_dev : NULL, p_resource->p_input)) { + vout = cfg->vout; + +out: + vlc_mutex_unlock( &p_resource->lock ); + return vout; +} + +int input_resource_ReconfigureVout(input_resource_t *p_resource, + vlc_decoder_device *dec_dev, + const vout_configuration_t *cfg) +{ + vlc_mutex_lock( &p_resource->lock ); + 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; + return -1; } - vout = cfg->vout; - DisplayVoutTitle(p_resource, vout); + DisplayVoutTitle(p_resource, cfg->vout); /* Send original viewpoint to the input in order to update other ESes */ if (p_resource->p_input != NULL) @@ -447,10 +458,8 @@ vout_thread_t *input_resource_GetVoutDecoderDevice(input_resource_t *p_resource, input_ControlPush(p_resource->p_input, INPUT_CONTROL_SET_INITIAL_VIEWPOINT, ¶m); } - -out: vlc_mutex_unlock( &p_resource->lock ); - return vout; + return 0; } vout_thread_t *input_resource_HoldVout( input_resource_t *p_resource ) diff --git a/src/input/resource.h b/src/input/resource.h index 537033c9d7..5e9d5c4ce9 100644 --- a/src/input/resource.h +++ b/src/input/resource.h @@ -41,6 +41,7 @@ vout_thread_t *input_resource_GetVoutDecoderDevice(input_resource_t *, const vout_configuration_t *, enum vlc_vout_order *order, vlc_decoder_device **); +int input_resource_ReconfigureVout(input_resource_t *, vlc_decoder_device *, const vout_configuration_t *); void input_resource_PutVout(input_resource_t *, vout_thread_t *); /** _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
