vlc | branch: master | Francois Cartegnie <[email protected]> | 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 ); } _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
