diff --git a/mythtv/libs/libmythtv/mpeg/dvbstreamdata.cpp b/mythtv/libs/libmythtv/mpeg/dvbstreamdata.cpp index 5fd3d29..daf85c1 100644 --- a/mythtv/libs/libmythtv/mpeg/dvbstreamdata.cpp +++ b/mythtv/libs/libmythtv/mpeg/dvbstreamdata.cpp @@ -280,6 +280,24 @@ bool DVBStreamData::HandleTables(uint pid, const PSIPTable &psip) SetSDToSectionSeen(tsid, psip.Section()); ServiceDescriptionTable sdt(psip); + if (sdt.OriginalNetworkID() == _desired_netid && + tsid == _desired_tsid) + { + ServiceDescriptionTable *sdta = + new ServiceDescriptionTable(psip); + sdta->Mutate(); + if (_cache_tables) + { + CacheSDT(sdta); + ProcessSDT(tsid, sdta); + } + else + { + ProcessSDT(tsid, &sdt); + delete sdta; + } + } + QMutexLocker locker(&_listener_lock); for (uint i = 0; i < _dvb_other_listeners.size(); i++) _dvb_other_listeners[i]->HandleSDTo(tsid, &sdt); diff --git a/mythtv/libs/libmythtv/mpeg/dvbtables.cpp b/mythtv/libs/libmythtv/mpeg/dvbtables.cpp index a766a1f..8d5d5ef 100644 --- a/mythtv/libs/libmythtv/mpeg/dvbtables.cpp +++ b/mythtv/libs/libmythtv/mpeg/dvbtables.cpp @@ -136,6 +136,12 @@ ServiceDescriptor *ServiceDescriptionTable::GetServiceDescriptor(uint i) const return NULL; } +void ServiceDescriptionTable::Mutate(void) +{ + SetTableID((TableID() == TableID::SDTo) ? TableID::SDT : TableID::SDTo); + SetCRC(CalcCRC()); +} + void DVBEventInformationTable::Parse(void) const { _ptrs.clear(); diff --git a/mythtv/libs/libmythtv/mpeg/dvbtables.h b/mythtv/libs/libmythtv/mpeg/dvbtables.h index 05dfdb5..f6f9d2a 100644 --- a/mythtv/libs/libmythtv/mpeg/dvbtables.h +++ b/mythtv/libs/libmythtv/mpeg/dvbtables.h @@ -154,6 +154,8 @@ class ServiceDescriptionTable : public PSIPTable // } ServiceDescriptor *GetServiceDescriptor(uint i) const; + void Mutate(void); + void Parse(void) const; QString toString(void) const;