From 382e27dc7fb103244832b8c5037be8be039fd4be Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Tue, 16 Sep 2014 21:43:10 +0200 Subject: [PATCH] Do our own SDT deduplication, to avoid infinite loops on Astra. --- decode_sdt.c => decode_sdt.cc | 9 +++++++++ 1 file changed, 9 insertions(+) rename decode_sdt.c => decode_sdt.cc (97%) diff --git a/decode_sdt.c b/decode_sdt.cc similarity index 97% rename from decode_sdt.c rename to decode_sdt.cc index ffd17b8..916505a 100644 --- a/decode_sdt.c +++ b/decode_sdt.cc @@ -44,6 +44,8 @@ #include #include +#include + static int packet_num = 0; static int last_used_packet_num = 0; @@ -181,6 +183,13 @@ has_stuff: static void ParseSDT(void *p_zero, dvbpsi_sdt_t * p_sdt) { + // Do our own deduplication, since libdvbpsi only deduplicates against + // the last version seen, not the entire history. + static std::set > seen_sdt_tables; + if (!seen_sdt_tables.insert(std::make_pair(p_sdt->i_version, p_sdt->b_current_next)).second) { + return; + } + last_used_packet_num = packet_num; dvbpsi_sdt_service_t *p_service = p_sdt->p_first_service; for (dvbpsi_sdt_service_t * p_service = p_sdt->p_first_service; -- 2.39.2