]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
tsdemux - PCR fix for ffmpeg input
authorJaroslav Kysela <perex@perex.cz>
Fri, 12 May 2017 14:56:58 +0000 (16:56 +0200)
committerJaroslav Kysela <perex@perex.cz>
Fri, 12 May 2017 14:57:00 +0000 (16:57 +0200)
The PCR clocking in the mpegts stream comming from the ffmpeg
is really ugly. There are up to 2 seconds gaps between updates.

src/input/mpegts/tsdemux.c
src/parsers/parsers.c
src/service.c

index b6bdf399bb4e7436b9a91b87500db8171aeeb44a..b0dd02e8a18fc63f78a7df74ae40799c13a5cb2c 100644 (file)
@@ -97,8 +97,8 @@ ts_recv_packet0
         pcr |=  (uint64_t)tsb2[9] << 1;
         pcr |= ((uint64_t)tsb2[10] >> 7) & 0x01;
         /* handle the broken info using candidate variable */
-        if (t->s_current_pcr == PTS_UNSET || pts_diff(t->s_current_pcr, pcr) <= 90000 ||
-            (t->s_candidate_pcr != PTS_UNSET && pts_diff(t->s_candidate_pcr, pcr) <= 90000)) {
+        if (t->s_current_pcr == PTS_UNSET || pts_diff(t->s_current_pcr, pcr) <= 2*90000 ||
+            (t->s_candidate_pcr != PTS_UNSET && pts_diff(t->s_candidate_pcr, pcr) <= 2*90000)) {
           if (pcr != t->s_current_pcr) {
             if (t->s_current_pcr == PTS_UNSET)
               tvhtrace(LS_TS, "%s: PCR initial: %"PRId64, service_nicename((service_t*)t), pcr);
index 72976dc758bcc6af6392e61d79961f6e6cfff6a0..7b4de558ca9a4226b9545cd1c59d421f8f141916 100644 (file)
@@ -1835,8 +1835,6 @@ parser_deliver(service_t *t, elementary_stream_t *st, th_pkt_t *pkt)
   diff = st->es_type == SCT_DVBSUB ? 6*90000 : 3*90000;
 
   if (pts_diff(pkt->pkt_pcr, pkt->pkt_pts) > diff) {
-    printf("%s: PTS and PCR diff is very big (%"PRId64")\n",
-           service_component_nicename(st), pts_diff(pkt->pkt_pcr, pkt->pkt_pts));
     if (tvhlog_limit(&st->es_pcr_log, 2))
       tvhwarn(LS_PARSER, "%s: PTS and PCR diff is very big (%"PRId64")",
               service_component_nicename(st), pts_diff(pkt->pkt_pcr, pkt->pkt_pts));
index a11876a16bceb1f4e66e11fa238d06ec42bb6d91..5063a8078a797e6365ed236229519e867240e8c5 100644 (file)
@@ -1070,7 +1070,7 @@ service_create0
 static void
 service_stream_make_nicename(service_t *t, elementary_stream_t *st)
 {
-  char buf[200];
+  char buf[256];
   if(st->es_pid != -1)
     snprintf(buf, sizeof(buf), "%s: %s @ #%d",
             service_nicename(t),