[vlc-commits] demux: ts: survive program deletion on pat/pmt update
Francois Cartegnie
git at videolan.org
Wed Nov 15 16:57:59 CET 2017
vlc | branch: master | Francois Cartegnie <fcvlcdev at free.fr> | Wed Nov 15 15:49:00 2017 +0100| [c0a6a45cd281207278cffb5fbe0eb68561d18354] | committer: Francois Cartegnie
demux: ts: survive program deletion on pat/pmt update
refs ts/La_Chevre_PATPMTevery6s.ts
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=c0a6a45cd281207278cffb5fbe0eb68561d18354
---
modules/demux/mpeg/ts_psi.c | 23 +++++++++++++++++++++++
1 file changed, 23 insertions(+)
diff --git a/modules/demux/mpeg/ts_psi.c b/modules/demux/mpeg/ts_psi.c
index 2938013230..813f9bb8f5 100644
--- a/modules/demux/mpeg/ts_psi.c
+++ b/modules/demux/mpeg/ts_psi.c
@@ -129,6 +129,24 @@ static void PATCallBack( void *data, dvbpsi_pat_t *p_dvbpsipat )
old_pmt_rm.p_elems = p_pat->programs.p_elems;
ARRAY_INIT(p_pat->programs);
+ bool b_force_reselect = false;
+ if( p_sys->programs.i_size && p_sys->seltype == PROGRAM_AUTO_DEFAULT )
+ {
+ /* If the program was set by default selection, we'll need to repick */
+ b_force_reselect = true;
+ for( p_program = p_dvbpsipat->p_first_program; p_program != NULL;
+ p_program = p_program->p_next )
+ {
+ if( p_sys->programs.p_elems[0] == p_program->i_number )
+ {
+ b_force_reselect = false;
+ break;
+ }
+ }
+ if( b_force_reselect )
+ ARRAY_RESET( p_sys->programs );
+ }
+
/* now create programs */
for( p_program = p_dvbpsipat->p_first_program; p_program != NULL;
p_program = p_program->p_next )
@@ -191,6 +209,11 @@ static void PATCallBack( void *data, dvbpsi_pat_t *p_dvbpsipat )
}
ARRAY_RESET(old_pmt_rm);
+ if( b_force_reselect && p_sys->programs.i_size )
+ {
+ es_out_Control( p_demux->out, ES_OUT_SET_GROUP, p_sys->programs.p_elems[0] );
+ }
+
dvbpsi_pat_delete( p_dvbpsipat );
}
More information about the vlc-commits
mailing list