From 4a9dc2a626aa54b339f6cf0b106fd9e3cfc7a29c Mon Sep 17 00:00:00 2001 From: Francois Cartegnie Date: Mon, 21 Jan 2019 16:02:33 +0100 Subject: [PATCH] access: bluray: process stream selection event last playlist info is not available yet and the stream selection has no longer access to parent p_sys --- modules/access/bluray.c | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/modules/access/bluray.c b/modules/access/bluray.c index 32b14b1d7f..e8f0b6fde1 100644 --- a/modules/access/bluray.c +++ b/modules/access/bluray.c @@ -309,6 +309,9 @@ typedef struct unsigned cur_seekpoint; unsigned updates; + /* Events */ + DECL_ARRAY(BD_EVENT) events_delayed; + vlc_mutex_t pl_info_lock; BLURAY_TITLE_INFO *p_pl_info; const BLURAY_CLIP_INFO *p_clip_info; @@ -857,6 +860,7 @@ static int blurayOpen(vlc_object_t *object) TAB_INIT(p_sys->i_title, p_sys->pp_title); TAB_INIT(p_sys->i_attachments, p_sys->attachments); + ARRAY_INIT(p_sys->events_delayed); vlc_mouse_Init(&p_sys->oldmouse); @@ -1122,6 +1126,8 @@ static void blurayClose(vlc_object_t *object) vlc_input_attachment_Delete(p_sys->attachments[i]); TAB_CLEAN(p_sys->i_attachments, p_sys->attachments); + ARRAY_RESET(p_sys->events_delayed); + vlc_mutex_destroy(&p_sys->pl_info_lock); vlc_mutex_destroy(&p_sys->bdj.lock); vlc_mutex_destroy(&p_sys->read_block_lock); @@ -2852,7 +2858,7 @@ static void blurayOnClipUpdate(demux_t *p_demux, uint32_t clip) blurayResetStillImage(p_demux); } -static void blurayHandleEvent(demux_t *p_demux, const BD_EVENT *e) +static void blurayHandleEvent(demux_t *p_demux, const BD_EVENT *e, bool b_delayed) { demux_sys_t *p_sys = p_demux->p_sys; @@ -2943,7 +2949,10 @@ static void blurayHandleEvent(demux_t *p_demux, const BD_EVENT *e) break; case BD_EVENT_AUDIO_STREAM: case BD_EVENT_PG_TEXTST_STREAM: - blurayOnStreamSelectedEvent(p_demux, e->event, e->param); + if(b_delayed) + blurayOnStreamSelectedEvent(p_demux, e->event, e->param); + else + ARRAY_APPEND(p_sys->events_delayed, *e); break; case BD_EVENT_IG_STREAM: case BD_EVENT_SECONDARY_AUDIO: @@ -3042,15 +3051,20 @@ static int blurayDemux(demux_t *p_demux) if (p_sys->b_menu == false) { nread = bd_read(p_sys->bluray, p_block->p_buffer, BD_READ_SIZE); while (bd_get_event(p_sys->bluray, &e)) - blurayHandleEvent(p_demux, &e); + blurayHandleEvent(p_demux, &e, false); } else { nread = bd_read_ext(p_sys->bluray, p_block->p_buffer, BD_READ_SIZE, &e); while (e.event != BD_EVENT_NONE) { - blurayHandleEvent(p_demux, &e); + blurayHandleEvent(p_demux, &e, false); bd_get_event(p_sys->bluray, &e); } } + /* Process delayed selections events */ + for(int i=0; ievents_delayed.i_size; i++) + blurayHandleEvent(p_demux, &p_sys->events_delayed.p_elems[i], true); + p_sys->events_delayed.i_size = 0; + blurayHandleOverlays(p_demux); if (nread <= 0) { -- 2.11.4.GIT