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