softhddevice gibt Sounddevice nicht frei

  • Schon mal Debug Version gebaut? Und vielleicht in paar mehr Ausgaben.
    Sieht mir nach einer Thread Race Condition aus.


    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

  • Habe das softhddevice mit Debug gebaut und beim ersten mal hat es mit dem Ton geklappt. Beim zweiten Versuch jedoch kein Ton in XBMC:


    Beim zurückschalten auf VDR auch kein Ton:


    Nach einem killall vdr wieder Ton wieder da im VDR
    Ein komlettes Logset: https://dl.dropboxusercontent.…g/g2v_log_09120801.tar.xz


    PS: mit "-w alsa-close-open-delay"

  • Also da geht schon was am Anfang schief.

    Code
    Sep 12 07:59:20 [root] 900 SoftHdDevice already detached_


    Das Plugin meint das es bereits detached ist.


    Leider sind im Audio Close keine Meldungen drin, Diese müssten ergänzt werden.


    Um das Umschaltscript auszuschliessen:

    Code
    while true; do svdrpsend plug softhddevice deta; fuser /dev/snd/*; svdrpsend plug softhddevice atta; done


    Vielleicht noch >/dev/null bei den svdrpsend's


    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

  • Das DETA im zweiten Log bei 7:59:20 ist da wo von XBMC (bereits ohne Ton) in den Launcher gewechselt wird. Sollte eigentlich nichts ausmachen, wenn es (unnötigerweise) erneut aufgerufen wird.


    Im ersten Log, wo die Schaltung von VDR -> XBMC abläuft. Sieht man nur ein DETA bei 7:56:56 und die Erfolgsmeldung bei 7:56:57.


    Wo muss ich da welche Ausgaben einbauen?

  • Ich habe die While-Schleife ein paar Sekunden laufen lassen und dann mit STRG-C abgebrochen. Die Ausgaben waren diese:

    Daraus werde ich nicht schlau... Nach dem STRG-C habe ich am VDR keinen Ton ;(

  • Laut Log hat es schon beim ersten Durchgang gehakt:

  • Moin,


    Code
    /dev/snd/pcmC1D7p:   17383m


    sollte nicht erscheinen. Ist also einfach reproduzierbar.


    Code
    softhddevice.ClearOnSwitch = 1


    Ist die entscheidene Option ? Mit der es geht oder nicht?


    Ansonsten:


    und mehr mal einbauen. Damit sieht ob und wann die aufgerufen werden.
    Und Plugin mit DEBUG bauen, sonst kommen die nicht.


    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

  • Vielen Dank für die Unterstützung.


    Ich habe die beiden Debugausgeben mal eingebaut und die While Schleife gestartet.


    Die Einstellung

    Code
    softhddevice.ClearOnSwitch = 1

    ist diejenige, wo es nicht geht.


    Habe manuell svdrpsend plug softhddevice deta und atta gemacht: Kein Ton:


    Wenn ich das gleiche (wieder Manuell) mit ClearOnSwitch=0 mache geht es:


    Wäre es nicht am einfachsten, wenn das Plugin den ClearOnSwitch beim DETA einfach ignorieren wüdre?

  • Also mit

    Code
    softhddevice.ClearOnSwitch = 1

    habe ich getestet, bei mir funktioniert es.
    Habe alsa-lib-1.0.28 und Stereo Ausgabe.


    Ich sehe keinen großen Unterschied zwischen den beiden Varianten.
    Mit Debugger könnte man den Exit tracen, aber ich kann den Fehler leider nicht nachstellen.


    Zitat

    Wäre es nicht am einfachsten, wenn das Plugin den ClearOnSwitch beim DETA einfach ignorieren würde?


    An der Stelle weiß man nicht ob es ein einfacher Kanalwechsel oder Detach ist.


    Verwende einfach kein ClearOnSwitch :).


    Ansonsten teste mal ob Stereo / HDMI / SPDIF ein Untersched macht. Und welche alsa-lib und Kernel?


    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

  • Verwende einfach kein ClearOnSwitch :).

    Das ist nicht wirklich eine Lösung. Es ist grausam, wenn das Bild nachläuft und das Menü schon da ist. :rolleyes:

    Ansonsten teste mal ob Stereo / HDMI / SPDIF ein Untersched macht. Und welche alsa-lib und Kernel?

    Ok, gerne. Wie muss ich das machen. Habe nur via HDMI-Kabel am Reciever angeschlossen und -a hw:Nvidia,7 in der Konfig stehen. Die AC3's habe ich im Plugin auf PassThru stehen.


    Kernel/Alsa




    Wie wäre es, wenn das Plugin wenn ein DETA kommt einfach selbst die Konfig in ClearOnSwitch ändert und bei ATTA wie der auf 1 stellt?

  • Mir fällt gerade noch ein, dass manchmal (selten) beim betätigen von Wiedergabe (Aufnahme) kein Ton kommt und das Bild dann nach ca. 1 Sekunde stehen bleibt. Wenn ich dann auf Stop und wieder auf Wiedergabe gehe geht es dann...


    Kann man im Plugin eventuell eine Abfrage einbauen, ob das Sounddevice freigegeben wurde und falls nicht dieses noch mal schließen?

  • MegaV0lt:
    Kannst du denn mit -w alsa-no-close-open beim Plugin-Aufruf leben? Ohne diesen Parameter hatte ich beim Starten von xbmc aus vdr heraus Probleme.
    Die hatte ich soweit analysiert, dass manchmal AlsaExit keinen pcm_close macht, weil der letzte PCMOpen noch in Arbeit war, dann aber der AudioThread beendet wurde. Danach ist das Ausgabegerät blockiert.

    vdr-2.6.7

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

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

  • Code
    -w alsa-no-close-open


    Damit hatte ich letztens das Problem, dass der Ton (Aufnahme) zwar bei der Werbung da war, aber in der Serie nicht! Ich habe das dann nicht weiter getestet.Also keine Option


    Und der mit delay bringt auch nichts. Habe sogar im Quellcode schon von 50 auf 100ms erhöht...

    Zitat

    Die hatte ich soweit analysiert, dass manchmal AlsaExit keinen pcm_close macht, weil der letzte PCMOpen noch in Arbeit war, dann aber der AudioThread beendet wurde. Danach ist das Ausgabegerät blockiert.

    Edit:
    Das wäre doch schon mal eine Erklärung, bzw. ein Ansatzpunkt für johns?


  • Die hatte ich soweit analysiert, dass manchmal AlsaExit keinen pcm_close macht, weil der letzte PCMOpen noch in Arbeit war, dann aber der AudioThread beendet wurde. Danach ist das Ausgabegerät blockiert.


    Sowas in der Art ist auch meine Vermutung. Nur ohne Fehler ist es schwierig zusuchen.



    Da steht schon brauche "lock", aber bisher klappte es ohne.


    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

  • Das ist nicht wirklich eine Lösung. Es ist grausam, wenn das Bild nachläuft und das Menü schon da ist. :rolleyes:

    Ok, gerne. Wie muss ich das machen. Habe nur via HDMI-Kabel am Reciever angeschlossen und -a hw:Nvidia,7 in der Konfig stehen. Die AC3's habe ich im Plugin auf PassThru stehen.


    Wie wäre es, wenn das Plugin wenn ein DETA kommt einfach selbst die Konfig in ClearOnSwitch ändert und bei ATTA wie der auf 1 stellt?


    Einfach den Stereoausgang verwenden, du hörst zwar nichts, aber es werden andere Treiber verwendet.
    Wenn es mit Stereo bei dir geht, dann kann ich es vergessen, hier mit Stereo den Fehler zu produzieren.


    alsa-lib-1.0.27.2 könnte ich testen.


    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

  • Ok, eingebaut und

    Code
    hdvdr01 softhddevice # svdrpsend plug softhddevice deta
    220 hdvdr01 SVDRP VideoDiskRecorder 2.1.6; Tue Sep 16 10:44:04 2014; UTF-8
    900 SoftHdDevice is detached
    221 hdvdr01 closing connection
    hdvdr01 softhddevice # svdrpsend plug softhddevice atta
    220 hdvdr01 SVDRP VideoDiskRecorder 2.1.6; Tue Sep 16 10:44:14 2014; UTF-8
    900 SoftHdDevice is attached
    221 hdvdr01 closing connection

    Mit ClearOnSwitch = 0


    Mit ClearOnSwitch=1

    Jetzt nach mehreren Tests mit Ton! Sind da die Debugausgaben schuld?

  • Jetzt nach mehreren Tests mit Ton! Sind da die Debugausgaben schuld?


    Sowas kann schon mal passieren, weil jetzt das Timing etwas anders ist und die race condition dadurch seltener ausgelöst wird.


    Lars.

  • Und das obwohl ich ja schon den -w alsa-close-open-delay switch verwende und im Code von 50 auf 100ms gegangen bin...


    Hab mal eben schnell ohne den -w alsa-close-open-delay getestet. Geht jetzt auch mit Ton...

  • Bei mir geht der DETA regelmäßig schief, wenn ich ohne alsa-no-close.open arbeite. Einfachste Abhilfe wäre in softhdevice.cpp in der DETA-Rountine zwischen ::Attach und Suspend einen sleep von mindestens 50ms einzubauen, besser aber die close-open-routine wie im anhängenden patch zu blocken.
    close-open-delay spielt dabei keine rolle, weil erst der open von thread-cancel gekillt wird

Jetzt mitmachen!

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