[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