vlc | branch: master | Steve Lhomme <[email protected]> | Mon Jul 1 14:03:18 2019 +0200| [3b836047ced4a51c73890a4c82a67d20c3ebcaaf] | 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=3b836047ced4a51c73890a4c82a67d20c3ebcaaf --- 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 0c791f2394..379e8f917a 100644 --- a/src/input/decoder.c +++ b/src/input/decoder.c @@ -524,36 +524,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_StartVout( 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 9ead6040a8..486289aee6 100644 --- a/src/input/resource.c +++ b/src/input/resource.c @@ -429,14 +429,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_StartVout(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) @@ -445,10 +456,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..e559c1633a 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_StartVout(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
