From: Jaroslav Kysela Date: Fri, 18 Mar 2016 15:42:37 +0000 (+0100) Subject: mpegts input: mpegts_input_recv_packets - add retry, fixes #2470 X-Git-Tag: v4.2.1~837 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4c75447a3ba54120ee545b8d5480b0907921ac46;p=thirdparty%2Ftvheadend.git mpegts input: mpegts_input_recv_packets - add retry, fixes #2470 --- diff --git a/src/input/mpegts/mpegts_input.c b/src/input/mpegts/mpegts_input.c index ce7318387..8e5bc21aa 100644 --- a/src/input/mpegts/mpegts_input.c +++ b/src/input/mpegts/mpegts_input.c @@ -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 }