vlc | branch: master | Francois Cartegnie <[email protected]> | Mon Apr 13 
21:47:39 2015 +0200| [f13b2add00507447bbbedc6810cea8164fb73b20] | committer: 
Francois Cartegnie

demux: ts: flag pid having pcr before es creation

Avoids breaking with pcr on separate pid

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=f13b2add00507447bbbedc6810cea8164fb73b20
---

 modules/demux/mpeg/ts.c |   11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/modules/demux/mpeg/ts.c b/modules/demux/mpeg/ts.c
index 008dc77..872e333 100644
--- a/modules/demux/mpeg/ts.c
+++ b/modules/demux/mpeg/ts.c
@@ -3033,15 +3033,15 @@ static void PCRHandle( demux_t *p_demux, ts_pid_t *pid, 
block_t *p_bk )
 {
     demux_sys_t   *p_sys = p_demux->p_sys;
 
-    if( p_sys->i_pmt_es <= 0 )
-        return;
-
     mtime_t i_pcr = GetPCR( p_bk );
     if( i_pcr < 0 )
         return;
 
     pid->probed.i_pcr_count++;
 
+    if( p_sys->i_pmt_es <= 0 )
+        return;
+
     if(unlikely(GetPID(p_sys, 0)->type != TYPE_PAT))
         return;
 
@@ -3126,15 +3126,16 @@ static void PCRFixHandle( demux_t *p_demux, ts_pmt_t 
*p_pmt, block_t *p_block )
     }
     else if( p_block->i_dts - p_pmt->pcr.i_first_dts > CLOCK_FREQ / 2 ) /* 
"PCR repeat rate shall not exceed 100ms" */
     {
-        if( p_pmt->pcr.i_current < 0 )
+        if( p_pmt->pcr.i_current < 0 &&
+            GetPID( p_demux->p_sys, p_pmt->i_pid_pcr )->probed.i_pcr_count == 
0 )
         {
             int i_cand = FindPCRCandidate( p_pmt );
             p_pmt->i_pid_pcr = i_cand;
             msg_Warn( p_demux, "No PCR received for program %d, set up 
workaround using pid %d",
                       p_pmt->i_number, i_cand );
             UpdatePESFilters( p_demux, p_demux->p_sys->b_es_all );
-            p_pmt->pcr.b_fix_done = true;
         }
+        p_pmt->pcr.b_fix_done = true;
     }
 }
 

_______________________________________________
vlc-commits mailing list
[email protected]
https://mailman.videolan.org/listinfo/vlc-commits

Reply via email to