Mailing List archive

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

[vdr] Re: vdr-1.3.1 autopid observations



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()) {

Home | Main Index | Thread Index