vlc/vlc-3.0 | branch: master | Francois Cartegnie <[email protected]> | Tue Feb 5 13:49:34 2019 +0100| [c701fa08e481e960c137a5fe274ea991e676f6e6] | committer: Francois Cartegnie
access: bluray: fix unmatched PID with menuless blurays (cherry picked from commit cd1fc44ecdccb70a979699bb9bea6ca22ebb4ddc) > http://git.videolan.org/gitweb.cgi/vlc/vlc-3.0.git/?a=commit;h=c701fa08e481e960c137a5fe274ea991e676f6e6 --- modules/access/bluray.c | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/modules/access/bluray.c b/modules/access/bluray.c index 52baa6b59d..68b13c2248 100644 --- a/modules/access/bluray.c +++ b/modules/access/bluray.c @@ -2149,8 +2149,9 @@ static int bluraySetTitle(demux_t *p_demux, int i_title) # define BLURAY_AUDIO_STREAM 0 #endif -static void blurayOnUserStreamSelection(demux_sys_t *p_sys, int i_pid) +static void blurayOnUserStreamSelection(demux_t *p_demux, int i_pid) { + demux_sys_t *p_sys = p_demux->p_sys; vlc_mutex_lock(&p_sys->pl_info_lock); if(i_pid == -AUDIO_ES) @@ -2159,19 +2160,30 @@ static void blurayOnUserStreamSelection(demux_sys_t *p_sys, int i_pid) bd_select_stream(p_sys->bluray, BLURAY_PG_TEXTST_STREAM, 0, 0); else if (p_sys->p_clip_info) { - if ((i_pid & 0xff00) == 0x1100) { + bool b_in_playlist = false; // audio for (int i_id = 0; i_id < p_sys->p_clip_info->audio_stream_count; i_id++) { if (i_pid == p_sys->p_clip_info->audio_streams[i_id].pid) { bd_select_stream(p_sys->bluray, BLURAY_AUDIO_STREAM, i_id + 1, 1); + if(!p_sys->b_menu) bd_set_player_setting_str(p_sys->bluray, BLURAY_PLAYER_SETTING_AUDIO_LANG, (const char *) p_sys->p_clip_info->audio_streams[i_id].lang); + b_in_playlist = true; break; } } + if(!b_in_playlist && !p_sys->b_menu) + { + /* Without menu, the selected playlist might not be correct and only + exposing a subset of PID, although same length */ + msg_Warn(p_demux, "Incorrect playlist for menuless track, forcing"); + es_out_Control(p_sys->p_out, BLURAY_ES_OUT_CONTROL_SET_ES_BY_PID, + BD_EVENT_AUDIO_STREAM, i_pid); + } } else if ((i_pid & 0xff00) == 0x1200 || i_pid == 0x1800) { + bool b_in_playlist = false; // subtitle for (int i_id = 0; i_id < p_sys->p_clip_info->pg_stream_count; i_id++) { if (i_pid == p_sys->p_clip_info->pg_streams[i_id].pid) { @@ -2179,9 +2191,16 @@ static void blurayOnUserStreamSelection(demux_sys_t *p_sys, int i_pid) if(!p_sys->b_menu) bd_set_player_setting_str(p_sys->bluray, BLURAY_PLAYER_SETTING_PG_LANG, (const char *) p_sys->p_clip_info->pg_streams[i_id].lang); + b_in_playlist = true; break; } } + if(!b_in_playlist && !p_sys->b_menu) + { + msg_Warn(p_demux, "Incorrect playlist for menuless track, forcing"); + es_out_Control(p_sys->p_out, BLURAY_ES_OUT_CONTROL_SET_ES_BY_PID, + BD_EVENT_PG_TEXTST_STREAM, i_pid); + } } } @@ -2223,7 +2242,7 @@ static int blurayControl(demux_t *p_demux, int query, va_list args) case DEMUX_SET_ES: { int i_id = va_arg(args, int); - blurayOnUserStreamSelection(p_sys, i_id); + blurayOnUserStreamSelection(p_demux, i_id); break; } case DEMUX_SET_TITLE: _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
