[vlc-commits] bluray: provide test-and-clear-flags control
Rémi Denis-Courmont
git at videolan.org
Sun Jan 28 15:18:27 CET 2018
vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Sun Dec 17 21:44:23 2017 +0200| [46273bce36e62972b2730a92b275a34d1122d95e] | committer: Rémi Denis-Courmont
bluray: provide test-and-clear-flags control
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=46273bce36e62972b2730a92b275a34d1122d95e
---
modules/access/bluray.c | 26 +++++++++++++++++---------
1 file changed, 17 insertions(+), 9 deletions(-)
diff --git a/modules/access/bluray.c b/modules/access/bluray.c
index d3780055d9..c29f9a7dcc 100644
--- a/modules/access/bluray.c
+++ b/modules/access/bluray.c
@@ -151,6 +151,7 @@ struct demux_sys_t
input_title_t **pp_title;
unsigned cur_title;
unsigned cur_seekpoint;
+ unsigned updates;
vlc_mutex_t pl_info_lock;
BLURAY_TITLE_INFO *p_pl_info;
@@ -667,7 +668,7 @@ static int blurayOpen(vlc_object_t *object)
p_sys->i_still_end_time = 0;
/* init demux info fields */
- p_demux->info.i_update = 0;
+ p_sys->updates = 0;
TAB_INIT(p_sys->i_title, p_sys->pp_title);
TAB_INIT(p_sys->i_attachments, p_sys->attachments);
@@ -1844,7 +1845,7 @@ static int blurayControl(demux_t *p_demux, int query, va_list args)
int i_title = va_arg(args, int);
if (bluraySetTitle(p_demux, i_title) != VLC_SUCCESS) {
/* make sure GUI restores the old setting in title menu ... */
- p_demux->info.i_update |= INPUT_UPDATE_TITLE | INPUT_UPDATE_SEEKPOINT;
+ p_sys->updates |= INPUT_UPDATE_TITLE | INPUT_UPDATE_SEEKPOINT;
return VLC_EGENERIC;
}
blurayResetParser( p_demux );
@@ -1856,10 +1857,16 @@ static int blurayControl(demux_t *p_demux, int query, va_list args)
int i_chapter = va_arg(args, int);
bd_seek_chapter(p_sys->bluray, i_chapter);
notifyDiscontinuity( p_sys );
- p_demux->info.i_update |= INPUT_UPDATE_SEEKPOINT;
+ p_sys->updates |= INPUT_UPDATE_SEEKPOINT;
+ break;
+ }
+ case DEMUX_TEST_AND_CLEAR_FLAGS:
+ {
+ unsigned *restrict flags = va_arg(args, unsigned *);
+ *flags &= p_sys->updates;
+ p_sys->updates &= ~*flags;
break;
}
-
case DEMUX_GET_TITLE:
*va_arg(args, int *) = p_sys->cur_title;
break;
@@ -2008,7 +2015,7 @@ static int blurayControl(demux_t *p_demux, int query, va_list args)
case DEMUX_NAV_MENU:
if (p_sys->b_menu) {
if (bd_menu_call(p_sys->bluray, -1) == 1) {
- p_demux->info.i_update |= INPUT_UPDATE_TITLE | INPUT_UPDATE_SEEKPOINT;
+ p_sys->updates |= INPUT_UPDATE_TITLE | INPUT_UPDATE_SEEKPOINT;
return VLC_SUCCESS;
}
msg_Err(p_demux, "Can't select Top Menu title");
@@ -2212,13 +2219,13 @@ static void blurayUpdatePlaylist(demux_t *p_demux, unsigned i_playlist)
if (!p_sys->b_menu)
p_sys->cur_title = bd_get_current_title(p_sys->bluray);
p_sys->cur_seekpoint = 0;
- p_demux->info.i_update |= INPUT_UPDATE_TITLE | INPUT_UPDATE_SEEKPOINT;
+ p_sys->updates |= INPUT_UPDATE_TITLE | INPUT_UPDATE_SEEKPOINT;
BLURAY_TITLE_INFO *p_title_info = bd_get_playlist_info(p_sys->bluray, i_playlist, 0);
if (p_title_info) {
blurayUpdateTitleInfo(p_sys->pp_title[p_sys->cur_title], p_title_info);
if (p_sys->b_menu)
- p_demux->info.i_update |= INPUT_UPDATE_TITLE_LIST;
+ p_sys->updates |= INPUT_UPDATE_TITLE_LIST;
}
setTitleInfo(p_sys, p_title_info);
@@ -2263,7 +2270,8 @@ static void blurayHandleEvent(demux_t *p_demux, const BD_EVENT *e)
/* this is feature title, we don't know yet which playlist it will play (if any) */
setTitleInfo(p_sys, NULL);
/* reset title infos here ? */
- p_demux->info.i_update |= INPUT_UPDATE_TITLE | INPUT_UPDATE_SEEKPOINT; /* might be BD-J title with no video */
+ p_sys->updates |= INPUT_UPDATE_TITLE | INPUT_UPDATE_SEEKPOINT;
+ /* might be BD-J title with no video */
break;
case BD_EVENT_PLAYLIST:
/* Start of playlist playback (?????.mpls) */
@@ -2284,7 +2292,7 @@ static void blurayHandleEvent(demux_t *p_demux, const BD_EVENT *e)
p_sys->cur_seekpoint = e->param - 1;
else
p_sys->cur_seekpoint = 0;
- p_demux->info.i_update |= INPUT_UPDATE_SEEKPOINT;
+ p_sys->updates |= INPUT_UPDATE_SEEKPOINT;
break;
case BD_EVENT_PLAYMARK:
case BD_EVENT_ANGLE:
More information about the vlc-commits
mailing list