]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
mpegts input: mpegts_input_recv_packets - add retry, fixes #2470
authorJaroslav Kysela <perex@perex.cz>
Fri, 18 Mar 2016 15:42:37 +0000 (16:42 +0100)
committerJaroslav Kysela <perex@perex.cz>
Fri, 18 Mar 2016 15:42:37 +0000 (16:42 +0100)
src/input/mpegts/mpegts_input.c

index ce7318387e8ad17a7c8f840555d1c81f2e9f4837..8e5bc21aacfa2554794fc6cec6336439c2f11ee1 100644 (file)
@@ -1044,13 +1044,17 @@ mpegts_input_recv_packets
   ( mpegts_input_t *mi, mpegts_mux_instance_t *mmi, sbuf_t *sb,
     int flags, mpegts_pcr_t *pcr )
 {
-  int len2 = 0, off = 0;
+  int len, len2, off;
   mpegts_packet_t *mp;
-  uint8_t *tsb = sb->sb_data;
-  int     len  = sb->sb_ptr;
+  uint8_t *tsb;
 #define MIN_TS_PKT 100
 #define MIN_TS_SYN (5*188)
 
+retry:
+  len2 = 0;
+  off  = 0;
+  tsb  = sb->sb_data;
+  len  = sb->sb_ptr;
   if (len < (MIN_TS_PKT * 188) && (flags & MPEGTS_DATA_CC_RESTART) == 0) {
     /* For slow streams, check also against the clock */
     if (monocmpfastsec(mclk(), mi->mi_last_dispatch))
@@ -1126,9 +1130,11 @@ mpegts_input_recv_packets
 
   /* Adjust buffer */
 end:
-  if (len && (flags & MPEGTS_DATA_CC_RESTART) == 0)
+  if (len && (flags & MPEGTS_DATA_CC_RESTART) == 0) {
     sbuf_cut(sb, off); // cut off the bottom
-  else
+    if (sb->sb_ptr >= MIN_TS_PKT * 188)
+      goto retry;
+  } else
     sb->sb_ptr = 0;    // clear
 }