<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Sun, Mar 16, 2014 at 7:10 PM, Denis Charmet <span dir="ltr"><<a href="mailto:typx@dinauz.org" target="_blank">typx@dinauz.org</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">The TS demux is PCR master but broken streams may have invalid PCR which stops the playback or at least the playback of some tracks.<br>

Those file can be played with --demux=avformat since it uses the minimum dts off all the tracks as PCR.<br>
<br>
The following patch implements the same thing.<br>
<br>
Any idea/comments on this PoC?<br>
<br>
Regards,<br>
---<br>
 modules/demux/ts.c | 25 ++++++++++++++++++++++---<br>
 1 file changed, 22 insertions(+), 3 deletions(-)<br>
<br>
diff --git a/modules/demux/ts.c b/modules/demux/ts.c<br>
index 093618e..04aa8d1 100644<br>
--- a/modules/demux/ts.c<br>
+++ b/modules/demux/ts.c<br>
@@ -140,7 +140,7 @@ vlc_module_begin ()<br>
     set_subcategory( SUBCAT_INPUT_DEMUX )<br>
<br>
     add_string( "ts-extra-pmt", NULL, PMT_TEXT, PMT_LONGTEXT, true )<br>
-    add_bool( "ts-trust-pcr", true, PCR_TEXT, PCR_LONGTEXT, true )<br>
+    add_bool( "ts-trust-pcr", false, PCR_TEXT, PCR_LONGTEXT, true )<br></blockquote><div><br></div><div>I am not sure it is a good idea to change this default. It will make all good streams take a different path and am not sure it won't break anything.<br>
</div><div>IMHO it should be defaulted to true.<br><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
         change_safe()<br>
     add_bool( "ts-es-id-pid", true, PID_TEXT, PID_LONGTEXT, true )<br>
         change_safe()<br>
@@ -272,6 +272,8 @@ typedef struct<br>
     ts_es_t     **extra_es;<br>
     int         i_extra_es;<br>
<br>
+    mtime_t     i_last_dts;<br>
+<br>
 } ts_pid_t;<br>
<br>
 struct demux_sys_t<br>
@@ -374,6 +376,7 @@ static int UserPmt( demux_t *p_demux, const char * );<br>
<br>
 static int  SetPIDFilter( demux_t *, int i_pid, bool b_selected );<br>
 static void SetPrgFilter( demux_t *, int i_prg, bool b_selected );<br>
+static mtime_t AdjustPCRWrapAround( demux_t *p_demux, mtime_t i_pcr );<br>
<br>
 #define TS_PACKET_SIZE_188 188<br>
 #define TS_PACKET_SIZE_192 192<br>
@@ -1388,6 +1391,7 @@ static void PIDInit( ts_pid_t *pid, bool b_psi, ts_psi_t *p_owner )<br>
     pid->b_scrambled = false;<br>
     pid->p_owner    = p_owner;<br>
     pid->i_owner_number = 0;<br>
+    pid->i_last_dts = VLC_TS_INVALID;<br>
<br>
     TAB_INIT( pid->i_extra_es, pid->extra_es );<br>
<br>
@@ -1723,9 +1727,24 @@ static void ParsePES( demux_t *p_demux, ts_pid_t *pid, block_t *p_pes )<br>
                          block_Duplicate( p_block ) );<br>
         }<br>
<br>
-        if (!p_sys->b_trust_pcr)<br>
-            es_out_Control( p_demux->out, ES_OUT_SET_PCR, p_block->i_pts);<br>
+        pid->i_last_dts = i_dts;<br>
+        if( !p_sys->b_trust_pcr )<br>
+        {<br>
+            mtime_t i_pcr = i_dts;<br>
+            for( int i = 2 ; i < 8192 ; i++ )<br>
+            {<br>
+               ts_pid_t *p_pid = &p_sys->pid[i];<br>
+               if( pid->b_valid && pid->p_owner == p_pid->p_owner &&<br>
+                   pid->i_owner_number == p_pid->i_owner_number &&<br>
+                   i_pcr > p_pid->i_last_dts )<br>
+               {<br>
+                   i_pcr = p_pid->i_last_dts;<br>
+               }<br>
+            }<br>
+            es_out_Control( p_demux->out, ES_OUT_SET_GROUP_PCR,<br>
+                      (int) pid->i_owner_number, (int64_t) i_pcr );<br>
<br>
+        }<br>
         es_out_Send( p_demux->out, pid->es->id, p_block );<br>
     }<br>
     else<br>
<span class="HOEnZb"><font color="#888888">--<br>
1.9.rc1<br>
<br></font></span></blockquote><div>Kind regards,<br><br></div><div>Jean-Paul Saman <br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="HOEnZb"><font color="#888888">
_______________________________________________<br>
vlc-devel mailing list<br>
To unsubscribe or modify your subscription options:<br>
<a href="https://mailman.videolan.org/listinfo/vlc-devel" target="_blank">https://mailman.videolan.org/listinfo/vlc-devel</a><br>
</font></span></blockquote></div><br></div></div>