Mailing List archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[vdr] Re: vdr-1.3.1 autopid observations



Klaus Schmidinger wrote:
> 
> Christian Tramnitz wrote:
> >
> > I played around with vdr-1.3.1 since yesterday on my box (two FF card,
> > one DVB-T and one DVB-C).
> >
> > When enabling "4" (update transponders) in the setup I made the
> > following observations:
> >
> > DVB-T:
> > - PID change successful
> > - channel name change successful
> > - finding channels on the same "transponder" successful
> > - finding channels on a different "transponder" failed
> 
> This may be because the "different transponders" are only tuned to
> during the next EPG scan. Could you please try modifying VDR/eitscan.c
> in such a way that it also uses the primary device without waiting for the
> EPGScanTimeout? To do so, just change the line
> 
>   if (Device != cDevice::PrimaryDevice() || (cDevice::NumDevices() == 1 && Setup.EPGScanTimeout && now - lastActivity > Setup.EPGScanTimeout * 3600)) {
> 
> to
> 
>   if (true) {
> 
> > DVB-C:
> > - PID change successful
> > - channel name change failed
> > - finding channels on the same "transponder" failed
> > - finding channels on a different "transponder" failed
> 
> This may be due to a problem with multiple NITs being broadcast,
> only one of which can be valid. However, I haven't found out yet
> how to determine which one actually is the valid one.
> 
> The attached patch adds some more output to VDR/nit.c.
> Please run VDR with only the DVB-C device and send me the
> output (stdout) this produces. Set "Update channels" to '3'
> ("add new channels") so that it won't switch away from your
> initial transponder.
> 
> Klaus
> 
>   ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
> --- nit.c       2004/01/11 15:42:51     1.1
> +++ nit.c       2004/01/17 10:04:42
> @@ -35,6 +35,31 @@
>       return;
>    if (!Channels.Lock(true, 10))
>       return;
> +  SI::Descriptor *d;//XXX
> +  for (SI::Loop::Iterator it3; (d = nit.commonDescriptors.getNext(it3)); ) {//XXX
> +      printf("NIT: descr %02X\n", d->getDescriptorTag());
> +      switch (d->getDescriptorTag()) {
> +        case SI::NetworkNameDescriptorTag: {
> +             SI::NetworkNameDescriptor *nnd = (SI::NetworkNameDescriptor *)d;
> +             char buffer[1024];
> +             printf("     name = '%s'\n", nnd->name.getText(buffer));
> +             }
> +             break;
> +        case SI::LinkageDescriptorTag: {
> +             SI::LinkageDescriptor *ld = (SI::LinkageDescriptor *)d;
> +             char buffer[1024];
> +             int len = ld->privateData.getLength();
> +             strncpy(buffer, (const char *)ld->privateData.getData(), len);
> +             buffer[len] = 0;
> +             printf("    linkage %02X  %5d %5d %5d", ld->getLinkageType(), ld->getOriginalNetworkId(), ld->getTransportStreamId(), ld->getServiceId());//XXX
> +             for (int i = 0; i < len; i++) printf(" %02X", (uchar)buffer[i]);//XXX
> +             if (ld->getLinkageType() == 0xB0) printf(" '%s'", buffer);//XXX
> +             printf("\n");//XXX
> +             }
> +             break;
> +        default: printf("********\n");
> +        }
> +      }//XXX
>    for (SI::Loop::Iterator it; nit.transportStreamLoop.hasNext(it); ) {
>        SI::NIT::TransportStream ts = nit.transportStreamLoop.getNext(it);
>        SI::Descriptor *d;
> @@ -50,6 +75,9 @@
>                   int CodeRate = CodeRates[sd->getFecInner()];
>                   int SymbolRate = BCD2INT(sd->getSymbolRate()) / 10;
>                   bool found = false;
> +                 printf("NIT: %6d %4d %4d %4d %6d %6d %d %2d %2d %2d\n", Transponder(), nit.getNetworkId(),//XXX
> +                 ts.getOriginalNetworkId(), ts.getTransportStreamId(), Frequency, SymbolRate, nit.getCurrentNextIndicator(),//XXX
> +                 nit.getVersionNumber(), nit.getSectionNumber(), nit.getLastSectionNumber());//XXX
>                   for (cChannel *Channel = Channels.First(); Channel; Channel = Channels.Next(Channel)) {
>                       if (!Channel->GroupSep() && Channel->Source() == Source && Channel->Nid() == ts.getOriginalNetworkId() && Channel->Tid() == ts.getTransportStreamId()) {
>                          if (Setup.UpdateChannels >= 4)
> @@ -77,6 +105,9 @@
>                   static int Modulations[] = { QPSK, QAM_16, QAM_32, QAM_64, QAM_128, QAM_256 };
>                   int Modulation = Modulations[sd->getModulation()];
>                   int SymbolRate = BCD2INT(sd->getSymbolRate()) / 10;
> +                 printf("NIT: %6d %4d %4d %4d %6d %6d %d %2d %2d %2d\n", Transponder(), nit.getNetworkId(),//XXX
> +                 ts.getOriginalNetworkId(), ts.getTransportStreamId(), Frequency, SymbolRate, nit.getCurrentNextIndicator(),//XXX
> +                 nit.getVersionNumber(), nit.getSectionNumber(), nit.getLastSectionNumber());//XXX
>                   bool found = false;
>                   for (cChannel *Channel = Channels.First(); Channel; Channel = Channels.Next(Channel)) {
>                       if (!Channel->GroupSep() && Channel->Source() == Source && Channel->Nid() == ts.getOriginalNetworkId() && Channel->Tid() == ts.getTransportStreamId()) {

Ooops, I forgot that the linkage descriptor handling is not yet part of
the libsi in VDR 1.3.1. Please just comment out the lines your compiler
may complain about. Apparently the linkage descriptor doesn't get us any
forther in this context...

Klaus


-- 
Info:
To unsubscribe send a mail to ecartis@linuxtv.org with "unsubscribe vdr" as subject.



Home | Main Index | Thread Index