vlc | branch: master | Francois Cartegnie <[email protected]> | Thu Oct 25 16:39:40 2018 +0200| [5ac5494644dfe327948f54429538ab3149e55743] | committer: Francois Cartegnie
access: bluray: fix overlay regression due to es recycling > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=5ac5494644dfe327948f54429538ab3149e55743 --- modules/access/bluray.c | 36 ++++++++++++++++++++++++++---------- 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/modules/access/bluray.c b/modules/access/bluray.c index f0f9c82601..c381183220 100644 --- a/modules/access/bluray.c +++ b/modules/access/bluray.c @@ -529,7 +529,7 @@ static void blurayReleaseVideoES(demux_t *p_demux) p_sys->bdj.p_video_es, p_ov->i_channel ); } p_ov->i_channel = -1; - p_ov->status = Closed; + p_ov->status = ToDisplay; vlc_mutex_unlock(&p_ov->lock); if (p_ov->p_updater) { @@ -1193,6 +1193,25 @@ static int blurayGetStreamPID(demux_sys_t *p_sys, int i_stream_type, uint8_t i_s } /***************************************************************************** + * internal overlay + *****************************************************************************/ +static void bluraySetActiveVideoES(demux_t *p_demux, es_out_id_t *p_es) +{ + demux_sys_t *p_sys = p_demux->p_sys; + + vlc_mutex_lock(&p_sys->bdj.lock); + if(p_sys->bdj.p_video_es == p_es) + { + vlc_mutex_unlock(&p_sys->bdj.lock); + return; + } + p_sys->bdj.p_video_es = p_es; + vlc_mutex_unlock(&p_sys->bdj.lock); + es_out_Control( p_demux->out, ES_OUT_VOUT_SET_MOUSE_EVENT, p_es, + onMouseEvent, p_demux ); +} + +/***************************************************************************** * bluray fake es_out *****************************************************************************/ typedef struct @@ -1295,14 +1314,10 @@ static es_out_id_t *bluray_esOutAdd(es_out_t *p_out, const es_format_t *p_fmt) if (b_select) es_out_Control(p_demux->out, ES_OUT_SET_ES, p_es); } - if (p_es && fmt.i_cat == VIDEO_ES) - { - es_out_Control( p_demux->out, ES_OUT_VOUT_SET_MOUSE_EVENT, p_es, - onMouseEvent, p_demux ); - vlc_mutex_lock(&p_sys->bdj.lock); - p_sys->bdj.p_video_es = p_es; - vlc_mutex_unlock(&p_sys->bdj.lock); - } + + if (p_es && fmt.i_cat == VIDEO_ES && b_select) + bluraySetActiveVideoES(p_demux, p_es); + es_format_Clean(&fmt); vlc_mutex_unlock(&esout_priv->lock); @@ -2026,6 +2041,7 @@ static void bluraySendOverlayToVout(demux_t *p_demux, bluray_overlay_t *p_ov) { unref_subpicture_updater(p_ov->p_updater); p_ov->p_updater = NULL; + p_ov->i_channel = -1; subpicture_Delete(p_pic); return; } @@ -2873,7 +2889,7 @@ static void blurayHandleOverlays(demux_t *p_demux, int nread) vlc_mutex_lock(&ov->lock); bool display = ov->status == ToDisplay; vlc_mutex_unlock(&ov->lock); - if (display) { + if (display && ov->i_channel == -1) { /* NOTE: we might want to enable background video always when there's no video stream playing. Now, with some discs, there are perioids (even seconds) during which the video window disappears and just playlist is shown. _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
