#include <dvbpsi/sdt.h>
#include <dvbpsi/nit.h>
+#include <set>
+
static int packet_num = 0;
static int last_used_packet_num = 0;
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<std::pair<uint8_t, bool> > 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;