Index: mythtv-trunk/libs/libmythtv/eithelper.cpp =================================================================== --- mythtv-trunk.orig/libs/libmythtv/eithelper.cpp +++ mythtv-trunk/libs/libmythtv/eithelper.cpp @@ -210,6 +210,8 @@ void EITHelper::AddETT(uint atsc_major, void EITHelper::AddEIT(const DVBEventInformationTable *eit) { + QDateTime invalid = QDateTime::currentDateTime().addDays(30); + uint descCompression = (eit->TableID() > 0x80) ? 2 : 1; uint fix = fixup[eit->OriginalNetworkID() << 16]; fix |= fixup[(((uint64_t)eit->TSID()) << 32) | @@ -224,6 +226,12 @@ void EITHelper::AddEIT(const DVBEventInf uint version = eit->Version(); for (uint i = 0; i < eit->EventCount(); i++) { + if (eit->StartTimeUTC(i) > invalid) + { + VERBOSE(VB_IMPORTANT, LOC + QString("\nFound invalid event\n\n") + eit->toString()); + continue; + } + // Skip event if we have already processed it before... if (!eitcache->IsNewEIT(networkid, tsid, serviceid, tableid, version, eit->EventID(i), eit->EndTimeUnixUTC(i))) Index: mythtv-trunk/libs/libmythtv/mpeg/dvbtables.cpp =================================================================== --- mythtv-trunk.orig/libs/libmythtv/mpeg/dvbtables.cpp +++ mythtv-trunk/libs/libmythtv/mpeg/dvbtables.cpp @@ -186,6 +186,32 @@ uint DVBEventInformationTable::StartTime return secsSince1970; } +QString DVBEventInformationTable::toString(void) const +{ + QString str = + QString("EIT: TSID(0x%1) original_network_id(0x%2) service_id(%3), " + "No. of events: %4\n") + .arg(OriginalNetworkID()) + .arg(TSID()) + .arg(ServiceID()) + .arg(EventCount()); + + for (uint i = 0; i < EventCount(); i++) + { + str.append(QString(" event #%1 EID(0x%2)\n") + .arg(i, 2, 10) + .arg(EventID(i), 0, 16)); + str.append(" starts " + StartTimeUTC(i).toString(Qt::ISODate) + + QString(" (%2, %3), length %4\n") + .arg(StartTimeKey(i)) + .arg(StartTimeUnixUTC(i)) + .arg(DurationInSeconds(i))); + str.append(QString(" event descriptors length: %1\n") + .arg(DescriptorsLength(i))); + } + return str; +} + /** \fn dvbdate2qt(const unsigned char*) * \return UTC time */ Index: mythtv-trunk/libs/libmythtv/mpeg/dvbtables.h =================================================================== --- mythtv-trunk.orig/libs/libmythtv/mpeg/dvbtables.h +++ mythtv-trunk/libs/libmythtv/mpeg/dvbtables.h @@ -282,6 +282,8 @@ class DVBEventInformationTable : public static bool IsEIT(uint table_id); + QString toString(void) const; + private: mutable vector _ptrs; // used to parse }; Index: mythtv-trunk/libs/libmythtv/mpeg/pespacket.cpp =================================================================== --- mythtv-trunk.orig/libs/libmythtv/mpeg/pespacket.cpp +++ mythtv-trunk/libs/libmythtv/mpeg/pespacket.cpp @@ -21,6 +21,11 @@ using namespace std; bool PESPacket::AddTSPacket(const TSPacket* packet) { uint tlen = Length() + ((_pesdata-1) - _fullbuffer) + 4 /* CRC bytes */; + +// cerr << tlen << " = "; +// cerr << Length() << " + (( "; +// cerr << (uint64_t)_pesdata << "-1) - "; +// cerr << (uint64_t)_fullbuffer << " ) + 4" << endl; if (!tsheader()->PayloadStart()) { @@ -78,6 +83,8 @@ bool PESPacket::AddTSPacket(const TSPack return true; } +// cerr << _pesdataSize << ":"; +// cerr << tlen << endl; if (_pesdataSize >= tlen) { _badPacket = !VerifyCRC(); @@ -153,7 +160,8 @@ uint PESPacket::CalcCRC(void) const bool PESPacket::VerifyCRC(void) const { - bool ret = !HasCRC() || (CalcCRC() == CRC()); + bool ret = !HasCRC() + || (CalcCRC() == CRC()); if (!ret) { VERBOSE(VB_SIPARSER, @@ -324,20 +332,20 @@ static QMutex pes_alloc_mutex; unsigned char *pes_alloc(uint size) { QMutexLocker locker(&pes_alloc_mutex); - if (size <= 188) +/* if (size <= 188) return get_188_block(); else if (size <= 4096) - return get_4096_block(); + return get_4096_block();*/ return (unsigned char*) malloc(size); } void pes_free(unsigned char *ptr) { QMutexLocker locker(&pes_alloc_mutex); - if (is_188_block(ptr)) + /*if (is_188_block(ptr)) return_188_block(ptr); else if (is_4096_block(ptr)) return_4096_block(ptr); - else + else*/ free(ptr); }