Mailing List archive

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

[vdr] Re: [ANNOUNCE] autopid/nvod/portal patch v7



Hi Andreas,

Andreas Share wrote:

Hi Andreas,

nice work the latest (autopid9) patch:)

But 2 things i have seen will not work correctly. First one Direkt ond the
three will be added by the patch, but these channels cannot work, because
the data is wrong (12480 vertical). I could not understand how this can
happen....
The patch only looks at the transport stream id to find the corresponding frequency settings. I have discovered that this is the wrong way. i did assume that tid meant transponder id, but it doesn't. transport stream id's do uniquely identify a transponder, but there can be more that one transport stream id for a single transponder. tid's are only unique withid theyr network, so nid+tid identify a transponder.
So, what you are probably seeing there, is a case where the tansport stream id (tid) in the transponders.conf is wrong or even used on multiple transponders.
What i have so far been able to deduce from the neutrino source and the dvbdrivers scan aplication is that to get the transponder, tid, nid mapping right, a scan on the NIT (network information table, pid: 0x00, section: 0x40) is needed. The NIT also contains the frequencies and other operation parameters of the current and other transponders. Please correct me if i'm wrong!

The second is sometimes vdr fail to get an correct pmt-pid at very fast
zapping on premiere-channels. Because i could not see any error in eit.c to
get the pat, i think this must be an driver related problem. I think in this
case (pmt-pid == 0x0000) we should reread the pat. I have solve this at the
moment with an very dirty loop.....

....
  if (siProcessor) {
     siProcessor->SetCurrentTransponder(Channel->Source(), Channel->Tid());
     siProcessor->SetPendingProgramID(Channel->Sid());
     siProcessor->SetStatus(true);
     for (loop; loop < 2; loop++) {
         if (siProcessor->Wait4PidSync()) {
            vPid  = siProcessor->Vpid();
            aPid1 = siProcessor->Apid1();
            aPid2 = siProcessor->Apid2();
            dPid1 = siProcessor->Dpid1();
            dPid2 = siProcessor->Dpid2();
            tPid  = siProcessor->Tpid();
            pmtPID = siProcessor->PMTPID();
         }
         if (pmtPID |= 0x0000) break;
         printf("looping siProcessor to %d \n", loop);
    }
  }

  if (!pmtPID) {
     if (Interface) Interface->Error("No service available!");
  }

....

very nasty sideeffect: If an service transmit no data, it takes some time
bevor i  can switch zu another channel:( But i have seen no wrong pmt-pid
after the second loop anymore.
mh, in eit.c the PAT filter is reset immediatly after a piece of the pat has been received, maybe this should only happen after the pmtpid has been found.

I think there should be some simalary in eit.c in an (very) future release.
The next step will be to write a NIT parser. Since i do not like the way libdtv works and since there isn't a NIT parser in there, i'm probably going to steal some ideas from neutrinos sectionsd for it.

Andreas



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



Home | Main Index | Thread Index