void eCableScan::SDTReady(int error) { eDebug("[eCableScan] SDTReady %d", error); if (!error) { parseSDT(); } nextChannel(); }
/* * Read EIT segments from DVB-demuxer */ void readEventTables(int format, cFilter* filters) { int r = 0; u_char buf[1 << 12]; size_t l; int compressed; int uncompressed; float ratio; int64_t lastReadTime = 0; if (filters) { alarm(0); setTimeoutDeadline(); lastReadTime = getTime(); } while (1) { int pid = DVB_EIT_PID; if (filters) { if ((getTime() - finishTime) >= 0) { log_message(DEBUG, "timeout occurred"); break; } r = 0; int fd = filters->Poll(5000, &pid); if (fd > 0) { r = read(fd, buf, sizeof(buf)); if (r > 0) { lastReadTime = getTime(); } else if (r == 0) { if ((getTime() - lastReadTime) > 2000) { log_message(DEBUG, "did not read any more"); break; } } else { if (errno != ETIMEDOUT) log_message(ERROR, "pid read error %d", errno); } } } else { r = read(STDIN_FILENO, buf, sizeof(buf)); if (r < 0) { log_message(DEBUG, "did not read any more"); break; } } packet_count++; struct si_tab *tab = (struct si_tab *) buf; if (GetTableId(tab) == 0) { continue; } l = sizeof(struct si_tab) + GetSectionLength(tab); log_message(TRACE, "tableid %d len %d totallen %d.", GetTableId(tab), l, r); if (!SI::CRC32::isValid((const char *) buf, r)) { log_message(ERROR, "data or length is wrong for pid %d (0x%x) tableid %d (0x%x), len %d. skipping packet.",pid, pid, GetTableId(tab), GetTableId(tab), r); crcerr_count++; if (pid == DVB_TDT_PID && GetTableId(tab) == 112) { } } else { switch (pid) { case DVB_EIT_PID: parseEIT(buf, l); break; case DVB_SDT_PID: parseSDT(buf, l, &fullChannels); break; case DVB_TDT_PID: break; } } log_message( TRACE, "Status: %d pkts, %d prgms, %d updates, %d invalid, %d CRC err", packet_count, programme_count, update_count, invalid_date_count, crcerr_count); } uncompressed = get_stat("freesathuffman.uncompressed"); compressed = get_stat("freesathuffman.compressed"); ratio = (compressed>0)?uncompressed / compressed:1; log_message(DEBUG, "freesat huffman average expansion ratio: %f", ratio); }