From: Jaroslav Kysela Date: Wed, 10 Aug 2016 16:28:52 +0000 (+0200) Subject: globalheaders: add PTS_UNSET safe checks X-Git-Tag: v4.2.1~396 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=a782c8a54da75a4bab355e043f110529fa4bf109;p=thirdparty%2Ftvheadend.git globalheaders: add PTS_UNSET safe checks --- diff --git a/src/plumbing/globalheaders.c b/src/plumbing/globalheaders.c index 118ab894c..c837eb335 100644 --- a/src/plumbing/globalheaders.c +++ b/src/plumbing/globalheaders.c @@ -165,23 +165,31 @@ gh_queue_delay(globalheaders_t *gh, int index) * Find only packets which require the meta data. Ignore others. */ while (f != l) { - ssc = streaming_start_component_find_by_index - (gh->gh_ss, f->pr_pkt->pkt_componentindex); - if (ssc && ssc->ssc_index == index) - break; + if (f->pr_pkt->pkt_dts != PTS_UNSET) { + ssc = streaming_start_component_find_by_index + (gh->gh_ss, f->pr_pkt->pkt_componentindex); + if (ssc && ssc->ssc_index == index) + break; + } f = TAILQ_NEXT(f, pr_link); } while (l != f) { - ssc = streaming_start_component_find_by_index - (gh->gh_ss, l->pr_pkt->pkt_componentindex); - if (ssc && ssc->ssc_index == index) - break; + if (l->pr_pkt->pkt_dts != PTS_UNSET) { + ssc = streaming_start_component_find_by_index + (gh->gh_ss, l->pr_pkt->pkt_componentindex); + if (ssc && ssc->ssc_index == index) + break; + } l = TAILQ_PREV(l, th_pktref_queue, pr_link); } - diff = (l->pr_pkt->pkt_dts & PTS_MASK) - (f->pr_pkt->pkt_dts & PTS_MASK); - if (diff < 0) - diff += PTS_MASK; + if (l->pr_pkt->pkt_dts != PTS_UNSET && f->pr_pkt->pkt_dts != PTS_UNSET) { + diff = (l->pr_pkt->pkt_dts & PTS_MASK) - (f->pr_pkt->pkt_dts & PTS_MASK); + if (diff < 0) + diff += PTS_MASK; + } else { + diff = 0; + } /* special noop packet from transcoder, increase decision limit */ if (l == f && l->pr_pkt->pkt_payload == NULL)