Soft-Start bei softhddevice

  • Ich denke immer noch, wenn dies passiert, dann ist noch wo anders ein Fehler.
    Komme aber erst nächste Woche zum testen.


    Ist direkt darüber:

    Code
    1. RingBufferReadAdvance(AudioRing[AudioRingWrite].RingBuffer, skip);


    Da bzw. so wird unbenötigter Ton weggeworfen.


    Genauso kann man da, wenn nicht mehr genug Platz im Puffer ist, etwas vom Ton wegschmeissen.
    Die Frage ist, was macht man mit dem Zeitstempel?


    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 entspricht meinem alten Patch. Es geht also darum, beides zu kombinieren. Die Frage ist, wie viel man wann wodurch gesteuert überspringt.
    Jedenfalls erscheint mir das richtiger als der Ansatz mit AUDIO_MIN_BUFFER_FREE.
    Wenn ich mal wieder dazu komme, schaue ich mir das noch mal an.

  • Dein alter Patch, hat aber beim Video Zeitstempel agiert?


    Das wäre hier eine andere Stelle, und ich meinte hier direkt das zuviel gepufferte wegwerfen.


    Einzige Problem was ich sehe, sind Radiosender oder Standbildsender und daß an dieser Stelle der Puffer nie voll sein sollte.


    Man könnte auch noch AudioRingBufferSize hochsetzen, wenn 2s nicht reichen.


    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

  • Man könnte bei AudioStartThreshold * 4 < n einfach AudioStartThreshold * 2 weg schmeißen.
    Komme aber erst in ein paar Tagen dazu.

  • Wäre es möglich, dass die erste Video Pts und die erste Audio Pts vom neuen Stream so schnell wie es geht bekannt gemacht werden? Dann kann der Audio Teil deren Differenz minus einem Sicherheitsabstand überspringen. Das wäre ideal.

  • Die Zetistempel werden schon so schnell wie möglich durchgereicht.
    Aber dies ist DVB, da legt jeder den Standard, in wie weit es sowas überhaupt gibt, selbst aus.


    Der Ton wird gepuffert und wenn der erste Zeitstempel kommt, kann man die Zeit des gepufferten nachträglich berechnen.


    Video wird erstmal einfach ausgeben, wenn dann der Videozeitstempel bekannt wird, wird der Ton nachgeführt, wenn bereits zuviel gepuffert ist.
    Wenn das Video bereits zu weit in der Zukunft ist, verlangsamt bzw. gestoppt.


    Das Problem mit den Aufnahmen kann ich nachvollziehen. Der VDR liest schnell von der Platte und gibt die Daten an Video und Audio weiter.
    Ton dekodieren ist einfach und schnell. Bild dauert etwas. So kann dann der Tonpuffer voll sein, obwohl noch kein Video bereit ist.


    Hier sollte AUDIO_MIN_BUFFER_FREE zum tragen kommen, wenn kein Platz mehr im Audiopuffer ist, dann wartet der VDR bis Platz ist und wenn es zulange dauert, macht er ein Recover.


    Bei LiveTV sollte der Puffer nie voll werden. Wenn jetzt hier Probleme auftreten, vermute ich einen anderen Fehler.
    Hier kommen Bild und Ton synchron und außer bei irgendwelchen exotischen Sendern, sollte der Puffer nie voll werden.


    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

  • Wird denn beim Sprung in Aufnahmen auch wieder neu gestartet, sprich auf den Zeitstempel gewartet? Könnte man sich die die Differenz der Zeitstempel nicht merken (eine Art Cache) und beim Sprung erst mal den alten Wert verwenden und anpassen, so bald der neue Zeitunterschied bekannt ist?


    PS: Habe am WE mal die Git bis März 15 durchprobiert. Das Sanftanlaufen bei Sprüngen ist immer da... komisch...

    MP-Logos (Kanallogos für VDR) - Picons2VDR (Kanallogos für VDR) - MV_Backup (Backup mit RSync) - Skin FlatPlus (Fork)


    "75 GB sind genug für jeden." [Dt. Telekom], 2013

    ___

    Gen2VDR V7; VDR 2.5.1; Gehäuse: Antec Fusion V2 Black & iMon LCD (15c2:ffdc); Atric IR-Einschalter Rev. 4; Board: Intel DH77EB, Core i5-3550, NVidia GTX 750 Ti, 4 GB RAM; DVB: 1x Digital Devices CineS2 Quad V6.5 [VDR-User #1540]

  • Du wirst den hier suchen:


    Code
    1. #CONFIG += -DUSE_SOFTLIMIT # (tobe removed) limit the buffer fill


    Bevor dies habe ich mit soft limit gearbeitet. Laut Klaus war dies unnötig und falsch.
    Bis dahin sollte das Springen ohne Langsamlauf funktionieren. Danach dann nicht mehr.


    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

  • Zwei Fehlerkorrekturen in audio.c:
    In video.c haben audio_clock und VideoAudioDelay immer dasselbe Vorzeichen, in audio.c muß das auch so sein.
    „skip = used;“ darf erst nach der Debug Ausgabe kommen, sonst wird skip falsch ausgegeben.

  • Der Patch schaut richtig aus.


    Code
    1. if (AudioStartThreshold * 99 < used || (AudioVideoIsReady
    2. && AudioStartThreshold < used)) {
    3. return 0;
    4. }


    Die *4 können wir nicht so einfach entfernen. (Habe 4 -> 99 gemacht, was es auch entfernt).
    Danach gehen keine Radiokanäle mehr. Ansonsten konnte ich keine Probleme feststellen.
    Über streamdev gingen die Öffentlichrechtlichen ohne Probleme.


    Ein paar Sender mit Bildertafeln, haben die Debugausgabe "force start" getriggert.
    Ansonsten gibt es ein paar Meldungen beim Umschalten, aber nicht reproduzierbar, bei z.b. Viva, Anixe HD.


    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

  • Also in AudioNextRing() und in AudioEnqueue() AudioStartThreshold * 4 -> AudioStartThreshold * 99?
    Oder nur in AudioNextRing()?

  • Ist wie dein Patch, nur anstatt es zu entfernen, habe ich es umgebaut, so daß es nie zum Tragen kommt.


    An beiden Stellen. Anbei der komplette Patch, enthält noch ein ffmpeg 2.8 fix.


    Johns


    EDIT: alter Patch entfernt.

    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

    The post was edited 1 time, last by johns ().

  • Wenn ich das richtig verstehe, machst du das mit * 99, um es zu deaktivieren, aber nicht gleich zu entfernen? So wie #if 0?

  • Ja richtig.


    Man kann auch (0 && n) machen, war wenig zu tippen und erfült den Zweck, daß der erzwungene Start vom Ton nicht mehr erfolgt.


    Jihns

    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 kann die Umstellung von skip=used nicht nachvollziehen.
    Der Code steht doch vor dem RingBufferReadAdvance(skip), weil skip>used keinen Sinn macht.

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

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

  • Naja, genau das würde man aber auch gerne per Debug Ausgabe erfahren.
    Und skip>used wird in ringbuffer.c abgefangen.

  • Du hast es aber eine Zeile tiefer verschoben.


    Vorher war es vor der Debugausgabe, nun ist es nach der Debug und der Funktion.
    Auch wenn es RingBufferReadAdvance abfängt, ist es vorher lesbarer.


    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

  • Mag sein. Mir ging es darum skip ausgegeben zu bekommen, auch wenn es größer als used ist.
    Ich habe aber nichts dagegen, wenn du das lieber wieder rückgängig machen willst.

  • Nachdem ich ein völlig verstelltes AudioDelay korrigiert hatte, geht es jetzt bei mir ohne gelegentliche Tonhänger beim Umschalten.


    Was das Play nach Pause Problem bei Wiedergabe betrifft, bekomme ich mit angehängtem test.diff folgende Ausgabe (Ich habe dazu eine arteHD Aufnahme genommen, da tritt das häufig auf.):

    Wie man sieht, ist eine Zeit lang nach dem Start nach der Pause die AudioPts völlig aus der Spur.
    Sie erholen sich erst, nachdem es einen großen Sprung gibt (zwischen den DUPEs und DROPs).


    Manchmal geht es auch:


    Was mir auffällt ist, dass wenn es gut geht, die Zeile mit underrun später kommt und zwei Zeilen drüber bei dV 60 das dA 68 halbwegs passt.
    Wenn es drops und dupes gibt, kommt der underrun früher und bei dV 60 passt dA 4 nicht.


    Was geht da schief?

  • Ein paar Anmerkungen:


    frame->pkt_pts


    Schwankt, in VideoSetPts wird dies ausgeglichen. Steht im Syslog mit "0/\ms".
    Es scheint mit ffmpeg 2.9 im Griff zu sein. Ansonsten war es iirc 240ms bei SDTV.


    IIRC wird Pause und Sprünge verschieden behandelt.
    Bei Pause wird nur der aktuelle Stream eingefrohren.
    Ein paar Ruckler danach solten normal sein.
    Da Ton und Bild nicht 100% gleich gestoppt wird.
    Die Kommunikation erfolgt über 3 Threads, VDR, Bild, Tpn.


    Ein Sprung, löscht die internen Puffer und entspricht einem Kanalwechsel.


    Ich würde erstmal das Problem mit Sprünge und Kanalwechsel lösen.


    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