Patch für Multi-Frontend Devices

  • DVB-C + DVB-T2 geht das wahrscheinlich nicht ohne ein Relais oder entsprechende Filter

    Ich bin jetzt nicht so der Spezialist, aber soweit ich weiß benutzen DVB-T/T2/C, ISDB-T und ATSC so ziemlich den gleichen Frequenzbereich - in etwa von 177 - 860 MHz. Daher würden sie sich ja, in ein Kabel zusammengeführt, gegenseitig überlagern.

    Ich glaube eher, dass man nur Sat und *eines* dieser terrestrischen Standards zusammenführen kann.


    Wenn dem so ist, könnte man es für die Erkennung von T/C verwenden - bei eine Karte die einen DVB-T2 Sender empfängt , kann man dann ausschließen, das sie auch ein DVB-C Signal bekommt - und umgekehrt genau so.


    Helmut

  • Hi,


    genau deshalb gibt es Antennen Relais, das löst zwar das Problem auf einer Karte DVB-C und DVB-T2 nutzen zu können, aber VDR weiß nichts davon und meist haben die Karten nur einen Antenneneingang für 2 oder mehr Frontends.


    CU

    9000h

    Es ist eagl in wlehcer Reiehnfogle die Bchustebaen in Woeretrn vokrmomen. Huapstache der estre und leztte Bchustbae sitmmen.

  • Also das Timing bei Close()/Open() ist leider doch nicht ganz gelöst - ein Wechsel zurück auf Frontend 0/0 und dann wieder auf 0/1 ist aber möglich.

    Code
    1. ct 23 23:24:50 asus vdr[8525]: [8525] buffer stats: 0 (0%) used
    2. Oct 23 23:24:50 asus vdr[8525]: [8525] ERROR (dvbdevice.c,1793): /dev/dvb/adapter0/frontend1: Device or resource busy
    3. Oct 23 23:24:50 asus vdr[8525]: [8525] dvbopen: frontend 0/1:-1: Device or resource busy (dvbdevice.c:341)
    4. Oct 23 23:24:50 asus vdr[8525]: [8525] using frontend 0/1
    5. Oct 23 23:24:50 asus vdr[8525]: [8547] ERROR: frontend 0/1: Bad file descriptor (dvbdevice.c:1436)

    genau deshalb gibt es Antennen Relais

    Ich hbe kein Kabel-TV, deshalb habe ich mit solchen Dingen auch noch nie beschäftigt. Ist so ein Relais wirklich eine praktikable Lösung für den VDR?


    Helmut

  • Bevor das jetzt hier abdriftet würde ich darum bitten, dass wir uns auf das eigentliche Problem konzentrieren.

    Bis jetzt wissen wir noch nicht, ob der Patch mit einer DVB-Karte funktionieren würde, die tatsächlich mehrere Frontends implementiert, von denen immer nur eines zu einer Zeit verwendet werden kann (und die auch alle ein entsprechendes Antennensignal haben).

    Sollte dies der Fall sein, dann ist es müßig, dem Problem nachzujagen, das ich mit dem Schließen und wieder Öffnen ein und desselben Frontends habe, denn das habe ich ja nur zum Testen gemacht und kommt im praktischen Betrieb gar nicht vor.


    Klaus

  • Da das Umschalten zwischen den simulierten Frontends bei mir eigentlich wie geplant funktioniert hier nochmal zu Close/Open:

    Das Ergebnis von Close() für Open() heranzuziehen bringt leider nichts da ja hier nur ein Filehandle geschlossen wird.

    Die Hardware oder den Treiber berührt das nicht unbedingt.

    Ich mache jetzt in DvbOpen() bei Bedarf (Fehler -EBUSY) mehrere Versuche mit einem kurzen cCondWait::SleepMs(10) dazwischen, und so gelingt es mit maximal 20ms Verzögerung das Frontend doch zu öffnen.


    Genaueres kann aber vielleicht User TheTroll von hier VDR does not handle well TBS 5520SE multiple frontends sagen.


    Code
    1. Oct 24 22:51:58 asus vdr[21876]: [21876] switching to channel 6 S19.2E-1-1051-28724 (arte)
    2. Oct 24 22:51:58 asus vdr[21876]: [22017] osdteletext-receiver thread ended (pid=21876, tid=22017)
    3. Oct 24 22:51:58 asus vdr[21876]: [21876] buffer stats: 0 (0%) used
    4. Oct 24 22:51:58 asus vdr[21876]: [21876] --- DvbOpen --- frontend(0/1) : 20 ms
    5. Oct 24 22:51:58 asus vdr[21876]: [21876] using frontend 0/1
    6. Oct 24 22:51:59 asus vdr[21876]: [22016] device 1 TS buffer thread ended (pid=21876, tid=22016)
    7. Oct 24 22:51:59 asus vdr[21876]: [22015] buffer stats: 202664 (3%) use


    Helmut

  • Hi, I still have the same problem with you patch kls  


    Oct 25 13:09:22 nuc vdr: [6267] frontend 0/1 regained lock on channel 4 (CANAL +), tp 212012

    Oct 25 13:09:23 nuc vdr: [6264] frontend 0/0 lost lock on channel 1 (TF1), tp 234


    it's trying to use both frontend at the same time


  • HelmutB Seltsam, ich bekomme weder beim Öffnen noch beim Schließen der Frontends irgendeine Fehlermeldung.


    TheTroll do these two log entries appear without anything else in between?

    Can you please send me the entire log from the very start of VDR up to that point?

    You can email it to vdr@tvdr.de (no need to waste space here).


    Klaus

  • Seltsam, ich bekomme weder beim Öffnen noch beim Schließen der Frontends irgendeine Fehlermeldung.

    Vermutlich liegt es an meiner Hardware/Treiber-Kombination. Ein Schließen des Frontends kann doch einige Aufraumarbeiten im Treiber hervorrufen. Und wie es aussieht dauert das bei mir manchmal etwas länger.


    Aus 2.4.2. Digital TV frontend close()

    "This system call closes a previously opened front-end device. After
    closing a front-end device, its corresponding hardware might be powered
    down automatically."


    Helmut

  • OK, entsprechende Retries beim Open() sind sicher sinnvoll.


    Ich habe inzwischen eine Rückmeldung von einem User bekommen, der eine TBS6522 betreibt, allerdings nur mit DVB-S. Mit dem Patch benutzt VDR automatisch die richtigen Frontends, also von daher schon mal erfreulich.


    Jetzt wäre es noch interessant, wenn jemand das probieren könnte, der sowohl DVB-S also auch DVB-T empfängt, und der beide Signalarten an einem der Adapter angeschlossen hat. Wenn dann dort das Umschalten zwischen DVB-S und DVB-T funktioniert, können wir vielleicht sogar das Problem mit der simulierten Testumgebung ignorieren, weil es in der Praxis gar nicht auftritt...


    Klaus

  • Hi,

    Hat keiner einen Sundtek Stick? Der macht das doch auch. Ich habe ja keinen mehr (und kein DVB-C).

    Oder einen Mygica t230?

    Mfg Stefan

    Test-VDR1: HP rp5700 Fertigsystem, Core2Duo E6400, 2GB RAM, FF-SD C-2300, nvidia Slim-GT218 x1 | easyVDR 2.0 64Bit
    VDR3: in Rente

    VDR4: MSI G31M2 v2, Digitainer2-Geh., t6963c 6" gLCD, E5200, 2GB, 3TB WD Red, GT730, 2x TT S2-3200; easyVDR 3.5 64bit
    VDR5: Gigabyte
    GA-G31M-S2L, Intel E2140, Zotac GT730 passiv, Digitainer2-Geh., t6963c 6 " gLCD, 2 TB WD Red, 2x TT S2-3200 (an 1 Kabel) easyVDR 3.5 64bit
    VDR6:
    Intel E5200, GT630 passiv, F1 750 GB, t6963c gLCD, 2x TT S2-3200 | easyVDR 3.5 64bit
    VDR-User #1068
    www.easyvdr.de

  • Hi,


    yes there is no log in-between.

    I sent you the full log thanks!

  • Mittlerweile habe ich von einem Benutzer einer TBS 6522 einen erfolgreichen Testbericht bekommen. Das Umschalten der Frontends funktioniert also zumindest mit dieser Karte schon mal einwandfrei.


    Im Falle von TheTroll (TBS 5520SE) warte ich noch auf Rückmeldung. Die weiter oben in diesem Thread von ihm beobachtete Problematik kam, wie ich aus dem zugesandten Log sehen konnte, daher, dass wohl nicht die gepatchte VDR-Version aufgerufen wurde.


    Im Moment geht meine Vermutung dahin, dass es wohl problematisch ist, ein und dasselbe Frontend zu schließen und gleich wieder zu öffnen, wenn währenddessen das DVR-Device offen ist. Ich habe testweise mal das Öffnen des DVR-Devices unterbunden (durch ein "return false;" in cDvbDevice::OpenDvr()) und konnte danach ohne Timeouts zwischen den Frontends hin und her schalten.


    Sollte es sich bestätigen, dass das Umschalten der Frontends bei entsprechenden DVB-Karten funktioniert und die Timeouts lediglich in der simulierten Testumgebung mit einer DVB-S/DVB-S2 Karte auftreten, werde ich das nicht mehr weiter verfolgen, da es nicht praxisrelevant ist.


    Klaus

  • Ich habe den Patch für die Unterstützung von Multi-Frontend-Devices jetzt fertiggestellt und wie im Anhang sichtbar umbenannt.

    Gegenüber der vorherigen Version gab es nur noch zwei funktionielle Änderungen:

    In cDvbFrontend::Close() wird jetzt im Fehlerfall eine Meldung gemacht

    Code
    1. @@ -344,7 +344,8 @@
    2. void cDvbFrontend::Close(void)
    3. {
    4. if (fd_frontend >= 0) {
    5. - close(fd_frontend);
    6. + if (close(fd_frontend) != 0)
    7. + esyslog("ERROR: frontend %d/%d", adapter, frontend);
    8. fd_frontend = -1;
    9. }
    10. }

    und die Mudulationsarten werden nur beim ersten Frontend gezählt, da anscheinend bei solchen Devices alle Frontends das Gleiche melden

    Code
    1. @@ -484,7 +485,7 @@
    2. fe = new cDvbFrontend(adapter, i);
    3. dvbFrontends.Append(fe);
    4. numDeliverySystems += fe->NumDeliverySystems();
    5. - numModulations += fe->NumModulations();
    6. + //numModulations += fe->NumModulations(); // looks like in multi frontend devices all frontends report the same modulations
    7. FrontendNumbers = cString::sprintf("%s+%d", *FrontendNumbers, i);
    8. }
    9. }

    Der Diff ist jetzt etwas umfangreicher, weil ich Code, der von cDvbDevice nach cDvbFrontend gewandert ist entsprechend verschoben habe.


    Es wäre schön, wenn noch einige User mit Multi-Frontend Karten diesen Patch testen könnten. Zu beachten ist, dass in der momentanen Fassung entweder an allen Frontends auch ein Signal anliegen sollte, oder in der channels.conf keine Kanäle eingetragen sind, die eines der nicht angeschlossenen Frontends benötigen. Ebenso bitte die eventuell gemäß Handbuch der DVB-Karte angelegten symbolischen Links "dvr1 -> dvr0" und "demux1 -> demux0" entfernen, da VDR sonst diese Konstellation nicht erkennt.


    Im nächsten Schritt werde ich eine Automatik einbauen, die Frontends erkennt, welche kein Signal liefern (nicht angeschlossen oder schlechter Empfang) und diese bei der Auswahl des Devices (vorübergehend) aussen vor lässt.


    Klaus

  • Nachdem ich erst jetzt wieder zum Testen komme habe ich nun auch kurz meinen Astrometa DVB-T/T2/C USB Stick angesteckt (mit dem 1.Patch).

    + //numModulations += fe->NumModulations(); // looks like in multi frontend devices all frontends report the same modulations


    Das stimmt nur bei DVB-Karten wie von TBS mit nur einem Demodulator-Chip. Die zwei Frontends werden dann wegen der eigenständigen Tuner für SAT und Terrestrisch/Kabel angelegt.

    Bei Astrometa ist es umgekehrt - hier gibt es nur einen Tuner, aber 2 Demodulator-ICs und diese 2 Demods haben unterschiedliche Fähigkeiten bei Deliverysystems und Modulation:


    vdr[3731]: [3731] frontend 1/0 provides DVB-T with QPSK,QAM16,QAM64 ("Realtek RTL2832 (DVB-T)")

    vdr[3731]: [3731] frontend 1/1 provides DVB-T,DVB-T2,DVB-C with QPSK,QAM16,QAM32,QAM64,QAM128,QAM256 ("Panasonic MN88473")


    Da numModulations derzeit aber eigentlich nur als "bool"-Wert genutzt macht es eigentlich keinen großen Unterschied.


    Bei den Fehlermeldungen geht es allerdings drunter und drüber, z.B. auch in cDvbDevice::SetPid:

    asus vdr[4424]: [4424] ERROR (dvbdevice.c,2108): Invalid argument


    Auch vdr-femon hat Probleme:
    vdr[4015]: [4015] FEMON-ERROR: virtual void cFemonOsd::Show() Cannot open frontend device


    Ich habe es aber nur kurz ausprobiert und werde es heute auch noch mit dem 2.Patch versuchen.


    Helmut

  • vdr-femon kann das frontend1 nicht öffnen, weil cDvbDevice::Frontend() immer 0 zurückgibt.

    Dieser Patch holt die aktuelle Frontend-Nummer nun richtigerweise von cDvbTuner.

    Das passt nun für vdr-femon, für die devices DVR, CA und DEMUX ist cDvbDevice::Frontend() allerdings nicht mehr zu gebrauchen.

    Auch beim aktuellen Patch und dem Astrometa-T2 beschwert sich cDvbDevice::SetPid() beim ersten Umschalten von Frontend 0/0 zu 0/1 - ich bin aber noch nicht dahintergekommen warum.

    Code
    1. vdr[19125]: [19125] switching to channel 1 T-8232-101-14107 (ORF1)
    2. vdr[19125]: [19263] device 1 TS buffer thread ended (pid=19125, tid=19263)
    3. vdr[19125]: [19262] buffer stats: 0 (0%) used
    4. vdr[19125]: [19262] device 1 receiver thread ended (pid=19125, tid=19262)
    5. vdr[19125]: [19125] using frontend 0/1
    6. vdr[19125]: [19125] ERROR (dvbdevice.c,2097): Invalid argument
    7. vdr[19125]: [19125] ERROR: can't set PID 1070 on device 1
    8. vdr[19125]: [19125] ERROR (dvbdevice.c,2097): Invalid argument
    9. vdr[19125]: [19125] ERROR: can't set PID 1015 on device 1


    Helmut