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:

    Kanallogos: Picon.cz2VDR | Picons2VDR | MP-Logos
    Backup-Skripte:
    MV_Backup (RSync) | MV_BorgBackup (Borg)

    Skin: Skin FlatPlus

    "Es gibt keinen Grund, warum irgendjemand einen Computer in seinem Haus wollen würde."
    [Ken Olson], Präsident der Digital Equipment Corp., 1977

  • 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

    Kanallogos: Picon.cz2VDR | Picons2VDR | MP-Logos
    Backup-Skripte:
    MV_Backup (RSync) | MV_BorgBackup (Borg)

    Skin: Skin FlatPlus

    "Es gibt keinen Grund, warum irgendjemand einen Computer in seinem Haus wollen würde."
    [Ken Olson], Präsident der Digital Equipment Corp., 1977

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

    Kanallogos: Picon.cz2VDR | Picons2VDR | MP-Logos
    Backup-Skripte:
    MV_Backup (RSync) | MV_BorgBackup (Borg)

    Skin: Skin FlatPlus

    "Es gibt keinen Grund, warum irgendjemand einen Computer in seinem Haus wollen würde."
    [Ken Olson], Präsident der Digital Equipment Corp., 1977

  • Habe mal eine saubere Version gebaut:


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


    Johns

    Files

    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?

    Kanallogos: Picon.cz2VDR | Picons2VDR | MP-Logos
    Backup-Skripte:
    MV_Backup (RSync) | MV_BorgBackup (Borg)

    Skin: Skin FlatPlus

    "Es gibt keinen Grund, warum irgendjemand einen Computer in seinem Haus wollen würde."
    [Ken Olson], Präsident der Digital Equipment Corp., 1977

  • Patch von Johns fkt hier auch

    vdr-2.6.3

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

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

  • 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:

    Kanallogos: Picon.cz2VDR | Picons2VDR | MP-Logos
    Backup-Skripte:
    MV_Backup (RSync) | MV_BorgBackup (Borg)

    Skin: Skin FlatPlus

    "Es gibt keinen Grund, warum irgendjemand einen Computer in seinem Haus wollen würde."
    [Ken Olson], Präsident der Digital Equipment Corp., 1977

    Edited once, last by Dirk: Forenregeln ().

  • 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

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!