From: Jaroslav Kysela Date: Thu, 16 Feb 2017 17:07:19 +0000 (+0100) Subject: teletext: avoid to update last_wr_time from TELETEXT packets, fixes #4166 X-Git-Tag: v4.2.1~106 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=edc9e6cb7a87a80bbd3a8938cd23b4d944bde98b;p=thirdparty%2Ftvheadend.git teletext: avoid to update last_wr_time from TELETEXT packets, fixes #4166 --- diff --git a/src/timeshift.c b/src/timeshift.c index a36b2c6ef..72c9dc208 100644 --- a/src/timeshift.c +++ b/src/timeshift.c @@ -304,6 +304,19 @@ const idclass_t timeshift_conf_class = { * Process a packet */ +static void +timeshift_smt_start ( timeshift_t *ts, streaming_start_t *ss ) +{ + int i; + + /* Update early teletext index */ + for (i = 0; i < ss->ss_num_components; i++) + if (ss->ss_components[i].ssc_type == SCT_TELETEXT) { + ts->teletextidx0 = ss->ss_components[i].ssc_index; + break; + } +} + static int timeshift_packet( timeshift_t *ts, streaming_message_t *sm ) { @@ -311,9 +324,12 @@ timeshift_packet( timeshift_t *ts, streaming_message_t *sm ) int64_t time; if (pkt->pkt_pts != PTS_UNSET) { - time = ts_rescale(pkt->pkt_pts, 1000000); - if (ts->last_wr_time < time) - ts->last_wr_time = time; + /* avoid to update last_wr_time for TELETEXT packets */ + if (ts->teletextidx0 != pkt->pkt_componentindex) { + time = ts_rescale(pkt->pkt_pts, 1000000); + if (ts->last_wr_time < time) + ts->last_wr_time = time; + } } sm->sm_time = ts->last_wr_time; timeshift_packet_log("wr ", ts, sm); @@ -361,6 +377,9 @@ static void timeshift_input else if (type == SMT_MPEGTS) ts->packet_mode = 0; + else if (type == SMT_START) + timeshift_smt_start(ts, (streaming_start_t *)sm->sm_data); + /* Send to the writer thread */ if (ts->packet_mode) { sm->sm_time = ts->last_wr_time; diff --git a/src/timeshift/private.h b/src/timeshift/private.h index 416e30c8c..e5fda4514 100644 --- a/src/timeshift/private.h +++ b/src/timeshift/private.h @@ -131,6 +131,7 @@ typedef struct timeshift { int file_segments; ///< Count of segments in files int vididx; ///< Index of (current) video stream + int teletextidx0; ///< Index of (current) teletext stream (EARLY) int teletextidx; ///< Index of (current) teletext stream streaming_start_t *smt_start; ///< Streaming start info