diff -u channelscan-0.0.3-fastscan/filter.c channelscan/filter.c --- channelscan-0.0.3-fastscan/filter.c 2005-03-29 00:03:39.000000000 +0200 +++ channelscan/filter.c 2005-03-29 21:56:22.000000000 +0200 @@ -218,6 +218,7 @@ endofScan=false; SetStatus(false); pit=pnum=0; + sdtfinished=false; } void PatFilter::SetSdtFilter(SdtFilter *SdtFilter) @@ -449,7 +450,7 @@ lastPmtScan[Index] = 0; // this triggers the next scan Channels.Unlock(); } - if (num && num>=sdtFilter->numSid) + if (sdtfinished && num>=sdtFilter->numSid) endofScan=true; } @@ -482,7 +483,9 @@ return; SI::SDT::Service SiSdtService; for (SI::Loop::Iterator it; sdt.serviceLoop.getNext(SiSdtService, it); ) { - cChannel *channel = Channels.GetByServiceID(Source(),Transponder(), SiSdtService.getServiceId()); + cChannel *channel = Channels.GetByChannelID(tChannelID(Source(), sdt.getOriginalNetworkId(), sdt.getTransportStreamId(), SiSdtService.getServiceId())); + if (!channel) + channel = Channels.GetByChannelID(tChannelID(Source(), 0, Transponder(), SiSdtService.getServiceId())); cLinkChannels *LinkChannels = NULL; SI::Descriptor *d; for (SI::Loop::Iterator it2; (d = SiSdtService.serviceDescriptors.getNext(it2)); ) { @@ -553,6 +556,7 @@ } Channels.Unlock(); if (sdt.getSectionNumber() == sdt.getLastSectionNumber()) { + patFilter->SdtFinished(); SetStatus(false); } } diff -u channelscan-0.0.3-fastscan/filter.h channelscan/filter.h --- channelscan-0.0.3-fastscan/filter.h 2005-03-28 22:59:31.000000000 +0200 +++ channelscan/filter.h 2005-03-29 21:52:51.000000000 +0200 @@ -24,6 +24,7 @@ SdtFilter *sdtFilter; bool endofScan; bool SidinSdt(int Sid); + bool sdtfinished; protected: virtual void Process(u_short Pid, u_char Tid, const u_char *Data, int Length); public: @@ -32,6 +33,7 @@ virtual void SetStatus(bool On); bool EndOfScan() {return endofScan;}; void Trigger(void); + void SdtFinished(void) {sdtfinished=true;}; }; int GetCaDescriptors(int Source, int Transponder, int ServiceId, const unsigned short *CaSystemIds, int BufSize, uchar *Data, bool &StreamFlag);