softhddevice gibt Sounddevice nicht frei

  • Statt sleeps sollte einfach eine Mutex o.ä. benutzt werden. Das ist immer die leichteste Variante, um zwei Threads zu synchronisieren.
    Der vdr bringt da eine vorbereitete Klasse cMutex mit. Und die ist auch vollkommen ausreichend, wenn es keine performancekritische Sache ist.


    Lars.

  • Ich habe SoftHDDEvice mit originaler audio.c und dem Patch von TomJoad gebaut (ohne Debug). Leider geht da der Ton nach DETA ATTA auch wieder nicht:
    Kein Ton:

  • In meinem Patch war noch ein kleines Problem, dass die Variable nicht initialisiert wird, wenn -w alsa-no-close-open verwendet wird. Ob jemand das gleiche Verhalten wie ich sieht, erkennt man dann daran, dass "AudioExit while in Setup" ausgegeben wird.
    MegaVOlt scheint ein anderes Problem zu haben.


    mini73: Mir wäre auch lieber, wenn softhddevice vdr-threads verwenden würde

  • Die Frage ist, liegt es nur daran, daß der Thread im Open ist und dann gecancelt wird?


    Es gibt mehrere Abhilfen. Ich hatte gehoffet, daß der Handle = NULL wie ein Lock funktioniert.
    Wenn nicht wäre ein Lock ja sehr einfach einzubauen.
    Oder man macht den Thread an der Stelle nicht cancelbar.



    zu den C++ Klassen. Threads sind so einfach, da muß man nicht extra eine Klasse für machen.
    Ich finde dieser C++ Klassenscheiß macht den Sourcecode unlesbar genauso wie die C #defines.
    Es mag einfach und bequem für den Author zusein, aber für einen Fremdleser wird der Code unlesbar.
    Threads versteht jeder sofort, wenn die in eine Klasse gezpackt sind, dann muß man noch an mindestens
    zwei Stellen nachlesen, was der Code macht.


    Johns

    Sag mir, wo die Developer sind. Wo sind sie geblieben? . . . . . . . . . . . . . . . . . . . . SoftHdDevice - A software and GPU emulated HD output device plugin.
    Sag mir, wo die Developer sind. Was ist geschehn?


    Client0: Crown CW02 MSI_C847MS-E33 Zotac_GT640_passiv Cine-S2 iMon-MCE / streamdev softhddevice
    Client1: Lian_Li_PC-Q09FB ASRock_H67M-ITX/HT I3-2100 ASUS_ENGT520_passiv / streamdev softhddevice
    Test: Lian_Li_PC-Q09R Asus C60M1-I / streamdev
    Server0: Dockstar TT-S2-3600-USB / streamdev
    Server2: Lian_Li_PC-Q07R Intel_DH61DL G620 WD20EARX 90W PicoPSU Cine-S2+DuoFlex-S2+DuoFlex-CT / streamdev / 22 Watt Verbrauch

  • Moin!


    Welche Thread-Implementierung benutzt wird, ist mir eigentlich egal, ob nun die Klasse des vdr oder direkt pthread macht keinen Unterschied.
    Ich hab nur von der Mutex gesprochen. Natürlich kann man die auch direkt initialisieren und benutzen, aber wenn das schon praktischerweise eine Klasse im vdr macht, sehe ich keinen Grund, die nicht zu benutzen. Die meisten Fremdleser werden mit den Aufrufen von Lock/Unlock eines cMutex-Objektes schon verstehen, was gemeint ist.


    http://projects.vdr-developer.…vdr.git/tree/thread.h#n63
    http://projects.vdr-developer.…dr.git/tree/thread.c#n175


    Beim Unlock würde ich im else-Zweig noch eine Fehlermeldung ins Log schreiben, denn das bedeutet, dass da einer Unlock häufiger aufruft als den Lock, aber das sind nicht so wichtige Details, solange man dafür sorgt, dass Lock/Unlock immer im Paar aufgerufen werden. Am besten benutzt man cMutexLock:


    http://projects.vdr-developer.…dr.git/tree/thread.h#n129
    http://projects.vdr-developer.…dr.git/tree/thread.c#n354


    Lars.

  • Viel Spass C++ im C zuverwenden.


    Johns

    Sag mir, wo die Developer sind. Wo sind sie geblieben? . . . . . . . . . . . . . . . . . . . . SoftHdDevice - A software and GPU emulated HD output device plugin.
    Sag mir, wo die Developer sind. Was ist geschehn?


    Client0: Crown CW02 MSI_C847MS-E33 Zotac_GT640_passiv Cine-S2 iMon-MCE / streamdev softhddevice
    Client1: Lian_Li_PC-Q09FB ASRock_H67M-ITX/HT I3-2100 ASUS_ENGT520_passiv / streamdev softhddevice
    Test: Lian_Li_PC-Q09R Asus C60M1-I / streamdev
    Server0: Dockstar TT-S2-3600-USB / streamdev
    Server2: Lian_Li_PC-Q07R Intel_DH61DL G620 WD20EARX 90W PicoPSU Cine-S2+DuoFlex-S2+DuoFlex-CT / streamdev / 22 Watt Verbrauch

  • Ich hatte mir den Code an der Stelle nicht so genau angesehen. Wenn das reines C ist, dann ist es natürlich was anderes. :)
    Ich hab beruflich so viel mit C++ zu tun, dass ich gar nicht auf die Idee gekommen bin, ein vdr-Plugin in C zu entwickeln, insbesondere, weil der vdr ja auch in C++ geschrieben ist. Dann muss man sich eben einfach die passenden init/lock/unlock-Teile rauskopieren, ist ja auch nicht so schlimm.


    Lars.

  • Erster kurzer Test mit dem Patch von johns sieht gut aus:


    Mit ClearOnSwitch=1 und ohne DEBUG gebaut geht nun der Ton!
    Gestartet ohne jegliche -w Switches

  • Erster kurzer Test mit dem Patch von johns sieht gut aus:


    Du meinst den FixDetach2.diff von TomJoad?

    VDR1: ACT-620, Asus P8B75-M LX, Intel Core i3-3240, 4 GB DDR3 RAM 1600 MHz, passive Geforce GT1030 von MSI, Sandisk 2TB SSD, 2xWinTV DualHD, Atric-IR-Einschalter. SW: Xubuntu 20.04 auf 64GB Sandisk SSD.

    VDR2: Odroid N2+ mit CoreELEC und Ubuntu in chroot, WinTV DualHD

    VDR3: Tanix TX3 mit CoreELEC und Ubuntu in chroot, WinTV DualHD

  • Nein; ich habe den von johns genommen. Hatte ich doch eigentlich geschrieben...

  • Habe mal eine saubere Version gebaut:


    Es wird der Thread nicht mehr von aussen abgeschossen, sondern ihm höflichst mitgeteilt sich zu beenden.


    Johns

    Dateien

    Sag mir, wo die Developer sind. Wo sind sie geblieben? . . . . . . . . . . . . . . . . . . . . SoftHdDevice - A software and GPU emulated HD output device plugin.
    Sag mir, wo die Developer sind. Was ist geschehn?


    Client0: Crown CW02 MSI_C847MS-E33 Zotac_GT640_passiv Cine-S2 iMon-MCE / streamdev softhddevice
    Client1: Lian_Li_PC-Q09FB ASRock_H67M-ITX/HT I3-2100 ASUS_ENGT520_passiv / streamdev softhddevice
    Test: Lian_Li_PC-Q09R Asus C60M1-I / streamdev
    Server0: Dockstar TT-S2-3600-USB / streamdev
    Server2: Lian_Li_PC-Q07R Intel_DH61DL G620 WD20EARX 90W PicoPSU Cine-S2+DuoFlex-S2+DuoFlex-CT / streamdev / 22 Watt Verbrauch

  • Habe nun auch den close_fix.diff von johns getestet und er geht. Habe Ton auch wenn ClearOnSwitch=1. Vielen Dank!


    Haben den Patch noch mehr Leute getestet? Wenn es so geht, könnte er ja übernommen werden?

  • Patch von Johns fkt hier auch

    vdr-2.6.4

    softhddevice, dbus2vdr, dvd, epgsearch, femon, graphtftng, hbbtv, menuorg,
    osdteletext, radio, recsearch, satip, tvguide, vnsiserver

    ubuntu focal, yavdr-ansible, linux-5.15 ,AsRock J4105, CIne CT-V7 DVB-C

  • Hab den Patch von Johns auch getestet und auch bei mir klappt es jetzt.


    Vielen Dank an Johns und allen die mitgeholfen haben.


    Gruß
    SieDu

  • Dann werde ich den mal ins GIT packen. Bin am Überlegen ob ich die gleiche Lösung nicht auch für Video nehmen soll.
    Irgentwie war ich der Meinung ich muß pthread_cancel nehmen.


    Johns

    Sag mir, wo die Developer sind. Wo sind sie geblieben? . . . . . . . . . . . . . . . . . . . . SoftHdDevice - A software and GPU emulated HD output device plugin.
    Sag mir, wo die Developer sind. Was ist geschehn?


    Client0: Crown CW02 MSI_C847MS-E33 Zotac_GT640_passiv Cine-S2 iMon-MCE / streamdev softhddevice
    Client1: Lian_Li_PC-Q09FB ASRock_H67M-ITX/HT I3-2100 ASUS_ENGT520_passiv / streamdev softhddevice
    Test: Lian_Li_PC-Q09R Asus C60M1-I / streamdev
    Server0: Dockstar TT-S2-3600-USB / streamdev
    Server2: Lian_Li_PC-Q07R Intel_DH61DL G620 WD20EARX 90W PicoPSU Cine-S2+DuoFlex-S2+DuoFlex-CT / streamdev / 22 Watt Verbrauch

  • Ich habe noch das Problem, dass manchmal der Ton weg ist. (Nach Play oder Stop; gelegentlich nach Umschalten). Das Log ist leider nicht sehr aussagekräftig:

  • Beim Umschalten dürfte es keine Thread Probleme geben.


    Aber die Debug Funktionen sind im Source:


    Code
    Debug(3, "audio: %s [\n", __FUNCTION__);
    und
    Debug(3, "audio: %s ]\n", __FUNCTION__);


    Einfach die "//" davor entfernen.


    Ansonsten noch die -w alsa-no-close-open und -w alsa-close-open-delay versuchen.


    Johns

    Sag mir, wo die Developer sind. Wo sind sie geblieben? . . . . . . . . . . . . . . . . . . . . SoftHdDevice - A software and GPU emulated HD output device plugin.
    Sag mir, wo die Developer sind. Was ist geschehn?


    Client0: Crown CW02 MSI_C847MS-E33 Zotac_GT640_passiv Cine-S2 iMon-MCE / streamdev softhddevice
    Client1: Lian_Li_PC-Q09FB ASRock_H67M-ITX/HT I3-2100 ASUS_ENGT520_passiv / streamdev softhddevice
    Test: Lian_Li_PC-Q09R Asus C60M1-I / streamdev
    Server0: Dockstar TT-S2-3600-USB / streamdev
    Server2: Lian_Li_PC-Q07R Intel_DH61DL G620 WD20EARX 90W PicoPSU Cine-S2+DuoFlex-S2+DuoFlex-CT / streamdev / 22 Watt Verbrauch

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!