diff options
author | Klaus Schmidinger <vdr@tvdr.de> | 2004-07-18 11:02:50 +0200 |
---|---|---|
committer | Klaus Schmidinger <vdr@tvdr.de> | 2004-07-18 11:02:50 +0200 |
commit | bf9e7df743ca99edd590671810cd3cd0171bf158 (patch) | |
tree | ec7a90eddf12e21e12f17a9e06a388602a7ccfb3 | |
parent | 39ad1fe179b66bedb7662ad0443633b0a085316a (diff) | |
download | vdr-bf9e7df743ca99edd590671810cd3cd0171bf158.tar.gz vdr-bf9e7df743ca99edd590671810cd3cd0171bf158.tar.bz2 |
Experimental support for NVOD channels
-rw-r--r-- | CONTRIBUTORS | 3 | ||||
-rw-r--r-- | HISTORY | 9 | ||||
-rw-r--r-- | eit.c | 4 | ||||
-rw-r--r-- | sdt.c | 24 |
4 files changed, 32 insertions, 8 deletions
diff --git a/CONTRIBUTORS b/CONTRIBUTORS index 560c7b15..dfbe07b9 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -1057,3 +1057,6 @@ Maynard Cedric <maynard.cedric@wanadoo.fr> Jörg Knitter <joerg.knitter@gmx.de> for reporting a problem in case the video partition is mounted with "iocharset=utf8" + +Mike parker <vdr@msatt.freeserve.co.uk> + for helping to test support for NVOD channels @@ -2936,14 +2936,14 @@ Video Disk Recorder Revision History - Fixed cRingBufferLinear::Get() in case the buffer wraps around (thanks to Ludwig Nussel for reporting this one). -2004-07-17: Version 1.3.12 +2004-07-18: Version 1.3.12 - Removed all error messages from cRecordings::ScanVideoDir() and just skipping entries that cause errors in order to avoid failure in case of things like broken links etc. - The function cTimers::SetEvents() now immediately returns if there is some user input. -- Fixed handling menu status messages when the list contents is scrolled (thanks +- Fixed handling menu status messages when the list contents is scrolled (thanks to Alfred Zastrow for reporting this one). - Fixed checking the last area for misalignment in cOsd::CanHandleAreas() (thanks to Reinhard Nissl for reporting this one). @@ -2956,3 +2956,8 @@ Video Disk Recorder Revision History error (suggested by Reinhard Nissl). - Avoiding flashing effects in the OSD of full featured DVB cards by explicitly clearing the OSD windows before opening them (suggested by Marco Schlüßler). +- Experimental support for NVOD channels. Currently these channels are detected + and linked to their "base" channels using the same mechanisms as for the + "linked services" (let's see if this is useful). Thanks to Mike parker for + helping to test this. Also used some input from the 'autopid' patch by Andreas + Schultz). @@ -8,7 +8,7 @@ * Robert Schneider <Robert.Schneider@web.de> and Rolf Hakenes <hakenes@hippomi.de>. * Adapted to 'libsi' for VDR 1.3.0 by Marcel Wiesweg <marcel.wiesweg@gmx.de>. * - * $Id: eit.c 1.95 2004/06/06 14:49:45 kls Exp $ + * $Id: eit.c 1.96 2004/07/18 10:52:58 kls Exp $ */ #include "eit.h" @@ -144,7 +144,7 @@ cEIT::cEIT(cSchedules *Schedules, int Source, u_char Tid, const u_char *Data) break; case SI::TimeShiftedEventDescriptorTag: { SI::TimeShiftedEventDescriptor *tsed = (SI::TimeShiftedEventDescriptor *)d; - cSchedule *rSchedule = (cSchedule *)Schedules->GetSchedule(tChannelID(Source, 0, 0, tsed->getReferenceServiceId())); + cSchedule *rSchedule = (cSchedule *)Schedules->GetSchedule(tChannelID(Source, channel->Nid(), channel->Tid(), tsed->getReferenceServiceId())); if (!rSchedule) break; rEvent = (cEvent *)rSchedule->GetEvent(tsed->getReferenceEventId()); @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: sdt.c 1.9 2004/06/06 14:25:22 kls Exp $ + * $Id: sdt.c 1.10 2004/07/18 10:58:01 kls Exp $ */ #include "sdt.h" @@ -46,6 +46,7 @@ void cSdtFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length 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)); ) { switch (d->getDescriptorTag()) { @@ -54,8 +55,8 @@ void cSdtFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length switch (sd->getServiceType()) { case 0x01: // digital television service case 0x02: // digital radio sound service - //XXX TODO case 0x04: // NVOD reference service - //XXX TODO case 0x05: // NVOD time-shifted service + case 0x04: // NVOD reference service + case 0x05: // NVOD time-shifted service { char NameBuf[1024]; char ShortNameBuf[1024]; @@ -102,7 +103,16 @@ void cSdtFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length SI::NVODReferenceDescriptor *nrd = (SI::NVODReferenceDescriptor *)d; for (SI::Loop::Iterator it; nrd->serviceLoop.hasNext(it); ) { SI::NVODReferenceDescriptor::Service Service = nrd->serviceLoop.getNext(it); - //printf(" %04X-%04X-%04X\n", Service.getOriginalNetworkId(), Service.getTransportStream(), Service.getServiceId());//XXX TODO + cChannel *link = Channels.GetByChannelID(tChannelID(Source(), Service.getOriginalNetworkId(), Service.getTransportStream(), Service.getServiceId())); + if (!link && Setup.UpdateChannels >= 3) { + link = Channels.NewChannel(Channel(), "NVOD", Service.getOriginalNetworkId(), Service.getTransportStream(), Service.getServiceId()); + patFilter->Trigger(); + } + if (link) { + if (!LinkChannels) + LinkChannels = new cLinkChannels; + LinkChannels->Add(new cLinkChannel(link)); + } } } break; @@ -110,6 +120,12 @@ void cSdtFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length } delete d; } + if (LinkChannels) { + if (channel) + channel->SetLinkChannels(LinkChannels); + else + delete LinkChannels; + } } Channels.Unlock(); } |