Verständnisfrage zum Handling der DVB-Treiber durch den VDR

  • Hallo,

    nachdem ich meine VDR's neu organisiert habe, folgende Frage:

    In einem steckt nun eine Hauppauge WinTV-HVR4000(Lite) Karte, die (leider) Firmware on demand macht. Das führt dazu, dass der vdr zwar OSD aber kein Bild und Ton hat. Nach meiner Analyse funktioniert es dann, wenn einmalig in cDvbDevice::SetPid ein sleep eingebaut wird. Ich schätze ein Timingproblem mit den Threads.

    Meine Frage nun, warum geht es dann damit?


    Hier ein paar Logauszüge und die Änderung an der dvbdevice.c.


    # dmesg | grep -i dvb

    [ 13.541578] cx88[0]: subsystem: 0070:6906, board: Hauppauge WinTV-HVR4000(Lite) DVB-S/S2 [card=69,autodetected], frontend(s): 1

    [ 13.800624] tveeprom 1-0050: TV standards ATSC/DVB Digital (eeprom 0x80)

    [ 14.026990] cx88/2: cx2388x dvb driver version 1.0.0 loaded

    [ 14.038605] cx88/2: registering cx8802 driver, type: dvb access: shared

    [ 14.050373] cx88[0]/2: subsystem: 0070:6906, board: Hauppauge WinTV-HVR4000(Lite) DVB-S/S2 [card=69]

    [ 14.074670] cx88[0]/2: cx2388x based DVB/ATSC card

    [ 14.103660] DVB: registering new adapter (cx88[0])

    [ 14.115762] cx88-mpeg driver manager 0000:05:01.2: DVB: registering adapter 0 frontend 0 (Conexant CX24116/CX24118)...

    [ 14.258054] cx24116_firmware_ondemand: Waiting for firmware upload (dvb-fe-cx24116.fw)...


    # journalctl -b

    Oct 26 07:49:32 Keller vdr[1314]: [1314] probing /dev/dvb/adapter0/frontend0

    Oct 26 07:49:32 Keller vdr[1314]: [1314] creating cDvbDevice

    Oct 26 07:49:32 Keller vdr[1314]: [1314] new device number 1

    Oct 26 07:49:32 Keller kernel: cx24116_firmware_ondemand: Waiting for firmware upload (dvb-fe-cx24116.fw)...

    Oct 26 07:49:32 Keller kernel: cx24116_firmware_ondemand: Waiting for firmware upload(2)...


    snip ( 6 Sekunden dauert der Firmwareload)


    Oct 26 07:49:38 Keller kernel: cx24116_load_firmware: FW version 1.26.90.0

    Oct 26 07:49:38 Keller kernel: cx24116_firmware_ondemand: Firmware upload complete

    Oct 26 07:49:39 Keller kernel: Key type dns_resolver registered

    Oct 26 07:49:39 Keller kernel: NFS: Registering the id_resolver key type

    Oct 26 07:49:39 Keller kernel: Key type id_resolver registered

    Oct 26 07:49:39 Keller kernel: Key type id_legacy registered

    Oct 26 07:49:39 Keller vdr[1314]: [1314] DVB API version is 0x050A (VDR was built with 0x050A)

    Oct 26 07:49:39 Keller vdr[1314]: [1314] frontend 0/0 provides DVB-S,DVB-S2 with QPSK ("Conexant CX24116/CX24118")

    Oct 26 07:49:39 Keller vdr[1314]: [1314] cTimeMs: using monotonic clock (resolution is 1 ns)

    Oct 26 07:49:39 Keller vdr[1314]: [1314] found 1 DVB device

    Oct 26 07:49:39 Keller vdr[1314]: [1314] initializing plugin: softhddevice (0.6.1rc1-GIT9c90c5a): A software and GPU emulated HD device

    Oct 26 07:49:39 Keller vdr[1314]: [1314] new device number 2


    # dvbdevice.c

    bool cDvbDevice::SetPid(cPidHandle *Handle, int Type, bool On)

    {

    if (Handle->pid) {

    dmx_pes_filter_params pesFilterParams;

    memset(&pesFilterParams, 0, sizeof(pesFilterParams));

    if (On) {

    if (Handle->handle < 0) {

    Handle->handle = DvbOpen(DEV_DVB_DEMUX, adapter, frontend, O_RDWR | O_NONBLOCK, true,0);

    >>> // warte einmal 2 Sekunden

    >>> // sleepsec ist statisches int weiter oben

    >>> sleep(sleepsec); // 2 sec

    >>> sleepsec = 0;

    if (Handle->handle < 0) {

    LOG_ERROR;

    return false;

    }

    }


    Hat mich einen Tag gekostet, aber jetzt läufts. Wahrscheinlich geht es eleganter, abe dazu fehlen mir die Kenntnisse.

    WoZi: VDR 2.3.8 auf OpenSuse Leap 42.1, Kernel 4.7.0-RC5, K208 [GeForce GT 730TT-Budget S2-3200 PCI,TechnoTrend TVStick CT2-4400 USB, Kodi git
    SchlafZi: VDR 2.3.8, OpenSuse Leap 42.1, Kernel 4.7.2, GeForce GT 630 Rev. 2, Hauppauge WinTV-HVR4000 PCI

    Keller: Headless PI3, VDR 2.3.8, Technotrend TT Connect S2-3600 USB


  • Du kannst vor dem vdr einfach ein kleines Script starten, welches mit einem der vielen dvb-Tools die Karte anspricht, damit sie einen Sender tuned. Dabei dürfte dann die Firmware geladen werden und der vdr muss dann nicht gepatched werden.


    Lars

  • Habe es mit w_scan versucht,

    hatte abber nicht funktioniert.

    WoZi: VDR 2.3.8 auf OpenSuse Leap 42.1, Kernel 4.7.0-RC5, K208 [GeForce GT 730TT-Budget S2-3200 PCI,TechnoTrend TVStick CT2-4400 USB, Kodi git
    SchlafZi: VDR 2.3.8, OpenSuse Leap 42.1, Kernel 4.7.2, GeForce GT 630 Rev. 2, Hauppauge WinTV-HVR4000 PCI

    Keller: Headless PI3, VDR 2.3.8, Technotrend TT Connect S2-3600 USB


  • Kann ich heute abend probieren. Wobei beim w_scan die Firmware auch vorher geladen wurde,

    Bild blieb trotzdem dunktel.

    WoZi: VDR 2.3.8 auf OpenSuse Leap 42.1, Kernel 4.7.0-RC5, K208 [GeForce GT 730TT-Budget S2-3200 PCI,TechnoTrend TVStick CT2-4400 USB, Kodi git
    SchlafZi: VDR 2.3.8, OpenSuse Leap 42.1, Kernel 4.7.2, GeForce GT 630 Rev. 2, Hauppauge WinTV-HVR4000 PCI

    Keller: Headless PI3, VDR 2.3.8, Technotrend TT Connect S2-3600 USB


  • Wenn du nach dem ersten (ungepatchten) Start des vdr ohne Bild den vdr einfach neustartest, kommt dann ein Bild?


    Wenn ja, müsste man ggf. mal den Treiber-Maintainer fragen, ob er z.B. eine Moduloption einbauen könnte, die die Firmware beim Initialisieren lädt (falls es nicht schon eine gibt, frag mal modinfo).


    Lars

  • Hi,

    Oder du nutzt dynamite-Plugin...

    Das ist ja dafür gebaut worden...

    MfG Stefan

    Test-VDR1: HP rp5700 Fertigsystem, Core2Duo E6400, 2GB RAM, FF-SD C-2300, nvidia Slim-GT218 512MB PCIe x1 | v2.0 64Bit
    VDR3: in Rente

    VDR4: MSI G31M2 v2, Digitainer2-Geh., t6963c 6" gLCD, E5200, 2GB, 750GB F1, GT730, 2x TT DVB-S2-3200) easyVDR 2.3
    VDR5: Gigabyte
    GA-G31M-S2L (Intel E2140, Zotac GT220 512MB + Zalman VNF100, Digitainer2-Geh., t6963c 6 " gLCD, 750GB F1, Sundtek DVB-C + Satelco DVB-C) easyVDR 1.0
    VDR6:
    Intel E5200, GT630 passiv, F1 750 GB, t6963c gLCD, 2x TT 3200 | easyVDR 2.3 64bit
    VDR-User #1068 
    www.easyvdr.de 

  • Wenn du nach dem ersten (ungepatchten) Start des vdr ohne Bild den vdr einfach neustartest, kommt dann ein Bild?

    ja.

    Das wäre dann das Modul cx24116. Es gibt lt. Modinfo keine diesbezügliche Option.


    Ich hatte mir auch dynamite angeschaut, hatte dann Probleme beim Senderwechsel auf Sky und habe es auf das Plugin geschoben. Wahrscheinlich zu unrecht, werde es mir nochmals in Ruhe anschauen.


    Die Frage bleibt aber, warum reicht ein einmaliger sleep von 2 Sek. beim Setzen der PIDs. Ich hatte auch an allen anderen Stellen, wo dvbOpen augrufen wird ein wait gesetzt. (bis zu 20 Sek.). Hat nichts gebracht.

    WoZi: VDR 2.3.8 auf OpenSuse Leap 42.1, Kernel 4.7.0-RC5, K208 [GeForce GT 730TT-Budget S2-3200 PCI,TechnoTrend TVStick CT2-4400 USB, Kodi git
    SchlafZi: VDR 2.3.8, OpenSuse Leap 42.1, Kernel 4.7.2, GeForce GT 630 Rev. 2, Hauppauge WinTV-HVR4000 PCI

    Keller: Headless PI3, VDR 2.3.8, Technotrend TT Connect S2-3600 USB


  • [...] müsste man ggf. mal den Treiber-Maintainer fragen, ob er z.B. eine Moduloption einbauen könnte, die die Firmware beim Initialisieren lädt (falls es nicht schon eine gibt[...]

    Das spezielle Problem hier habe ich (mangels passender Hardware) nicht genauer untersucht. Ich verwende aber voellig problemlos andere Hardware, die erst nach dem Start des vdr ihre Firmware laedt. _Das_ ist also nicht das Problem an diesem Treiber...


    Gruss,

    S:oren

  • Mag sein.

    Ich habe meinen Workaround gefunden und belass es dabei.

    Danke.

    WoZi: VDR 2.3.8 auf OpenSuse Leap 42.1, Kernel 4.7.0-RC5, K208 [GeForce GT 730TT-Budget S2-3200 PCI,TechnoTrend TVStick CT2-4400 USB, Kodi git
    SchlafZi: VDR 2.3.8, OpenSuse Leap 42.1, Kernel 4.7.2, GeForce GT 630 Rev. 2, Hauppauge WinTV-HVR4000 PCI

    Keller: Headless PI3, VDR 2.3.8, Technotrend TT Connect S2-3600 USB