softhddevice - Software VDPAU/VA-API/CPU Decoder und Ausgabe Plugin

  • So neuer Audio/Video Sync Code ist nun im GIT.
    Im Großen und Ganzen hat sich nicht viel geändert.
    Nur werden bei Interlaced Sourcen nicht gleich zwei Halbbilder mehr ausgelassen.
    Ansonsten sollte nun PES (alte VDR Aufnahmen) Trickspeed funktionieren.


    Relativiere doch nicht immer deine Arbeit :D Das waren mal wieder über 900 veränderte Codezeilen.


    Damit sind die von mir weiter oben beschriebenen "[softhddev] invalid PES video packet_ " Fehler bei den "speziellen" Senden nun auch weg.


    Naja ich bekomme die Meldung zweimal, kurz nach dem Umschalten. Sonst bleibt aber alles ziemlich still.


    johns : Das alte "decoder renderer too slow" Problem ist leider immernoch da. Ich hatte gehofft der neue NVIDIA Treiber hätte es beseitigt...


    Code
    1. Apr 1 12:52:35 vdr vdr: video/vdpau: decoder render too slow 73ms
    2. Apr 1 12:52:35 vdr vdr: video: decoder buffer empty, duping frame (162/6) 0 v-buf
    3. Apr 1 12:52:35 vdr vdr: video/vdpau: missed frame (1/15422)


    Es scheint aber stark eingeschränkt zu sein. Vorher wurden ja mehrere Frames verworfen. Jetzt nur noch eines.

  • Anbei mal (ggf. für späteres Feintuning) ein Log hinsichtlich Empfangsaussetzer meiner DVB-C Karte:


    http://pastebin.com/myPdjCrc


    Reaktion des Plugins:
    Bei zu starken/langen Störungen ist Bild/Ton eingeforen (Pixelsalat). Ein umschalten auf andere Kanäle (DVB-S, DVB-C) wird per OSD angezeigt, aber es kommt kein Bild/Ton.
    Ein SUPEND mit anschliessenden RESUME des Plugins bringt Abhilfe.


    Ggf. kann man ja eine Art Timeout einführen, sofern der schlechte Empfang erkennbar ist, welches eine OSD-Meldung ausgibt mit anschliessendem Reset (SUSP/RESU).


    Marcus

    My VDRs:

  • Anbei mal (ggf. für späteres Feintuning) ein Log hinsichtlich Empfangsaussetzer meiner DVB-C Karte:


    Ich glaube nicht das dies mit schlechten Empfang zusammenhängt, das ist eher ein Alsa sprich Kernel Problem.
    Da hat sich (nicht im Log) vorher der Sound aufgehängt und die Audiopuffer sind voll (70xx ms).
    Ein normaler Reset der beim Umschalten passiert, reicht scheinbar nicht 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


  • Also der Fehler ist: es kommt kein Videobild.
    Die obige Meldung kann nachdem Umschalten ein paar mal vorkommen, aber dann nicht mehr,
    Geht den SDTV? Welcher Sender?
    Ansonsten mal komplettes Log ins Pastebin.


    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

  • Hallo johns,


    ich erweitere gerade meinen Zoom-Patch um das Abschneiden der Ränder je Auflösung festlegen zu können; es hat sich gezeigt, dass das nötig ist.


    Allerdings hänge ich an einem kleinen Problem:


    Ich habe die Funktion um "resolution" erweitert:


    Code
    1. VideoUpdateOutput(decoder->InputAspect, decoder->InputWidth,
    2. decoder->InputHeight, &decoder->OutputX, &decoder->OutputY,
    3. &decoder->OutputWidth, &decoder->OutputHeight, &decoder->CropX,
    4. &decoder->CropY, &decoder->CropWidth, &decoder->CropHeight,
    5.   &decoder->Resolution);


    Allerdings wirft mir der Compiler einen Fehler aus:

    Code
    1. video.c: In Funktion »VideoUpdateOutput«:
    2. video.c:471:29: Fehler: Feldindex ist keine Ganzzahl
    3. video.c:472:28: Fehler: Feldindex ist keine Ganzzahl
    4. video.c:473:46: Fehler: Feldindex ist keine Ganzzahl
    5. video.c:474:49: Fehler: Feldindex ist keine Ganzzahl


    Wie stelle ich das den richtig an? Da ich mit C++ gerade erst anfange, bin ich hier mit meinem Latein am Ende. ?(
    Der Rest des Patches ist bereits fertig und steht quasi kurz vor dem Test, nur ohne dies wird es ja wohl nicht richtig funktionieren.


    CafeDelMar

  • Code
    1. VideoResolutions *resolution)


    Bei der Funktionsdefinition brauchst du nur, wenn du die resolution verändern willst (eine Reference auf den Wert übergeben willst)


    Code
    1. static void VideoUpdateOutput(AVRational input_aspect_ratio, int input_width,
    2. int input_height, VideoResolutions resolution, int *output_x, int *output_y, int *output_width,
    3. int *output_height, int *crop_x, int *crop_y, int *crop_width,
    4. int *crop_height)
    5. {


    Wäre das Richtige, nach vorne weil es ein Eingangswert ist. Also ohne "*".


    Die Idee mit Abhängigkeit zur Auflösung hatte ich auch schon, aber langsam wird es richtig kompiliziert für Anfänger.


    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

  • Wäre das Richtige, nach vorne weil es ein Eingangswert ist. Also ohne "*".


    Die Idee mit Abhängigkeit zur Auflösung hatte ich auch schon, aber langsam wird es richtig kompiliziert für Anfänger.


    Danke, johns, jetzt kompiliert es. Zum Testen komme ich erst morgen, wenn es funktioniert, poste ich den Patch hier.


    Ich bin hier schon wieder in die Falle mit der Dereferenzierung getappt, das macht C/C++ nicht gerade einfach. :wand
    Das mit den Input- und Output-Variablen ist auch logisch, soweit hatte ich gar nicht gedacht.


    CafeDelMar

  • Hallo johns,


    anbei ist der fertige Patch für auflösungsabhängigen Overscan gegen die (mittlerweile) vorletzte GIT-Version. Hiermit kann nun bei 1080i ein 1:1 Pixel-Mapping realisiert werden und gleichzeitig bei anderen Auflösungen ein beliebiger Overscan erfolgen. Werte zwischen 3% und 5% auf die jeweilige Auflösung bezogen sollten sinnvoll sein; die Einstellung erfolgt jedoch nach wie vor in Pixeln.


    Die Parameter habe ich nun CutHeight und CutWidth genannt, Du kannst es bei Bedarf ja umbenennen, einen Bruch mit vorherigen Versionen gibt es ja so oder so.


    Das Ganze funktioniert soweit auch wie gewünscht, allerdings ist mir aufgefallen, dass das Videobild bei einem AutoCrop nun um "CutWidth" aus der Mitte verschoben ist. Ich denke, der Cut-Wert muss nur bei der Berechnung der Bildmitte mit berücksichtigt werden, hier traue ich mich aber ohne tieferes Wissen von der Funktion Deines Codes nicht ran.


    CafeDelMar

  • Hallo Johns,
    Mein Frage ist zwar Off Topic, da das hier kein C++ Thread für Anfänger wie ich es bin ist.
    Wenn CafeDelMar seine Funktionsdefinition nicht geändert hätte also mit

    Code
    1. VideoResolutions *resolution


    Das hier funktioniert nicht:

    Code
    1. *crop_x = VideoCutHeight[resolution];


    Da er hier den Wert des Pointers braucht.
    Wäre das hier richtig ?

    Code
    1. *crop_x = VideoCutHeight[*resolution];


    Da er den Wert nicht verändern will/muss ist dein Vorschlag natürlich besser - Ich will es nur Verstehen ;D

    VDR 1 (SD) : ASRock A330 GC, 1 GB RAM, TT- FF Karte rev. 2.3, 7'' TFT, Lirc X10 - Selbstbau Gehäuse - Suse 11.3 (64) vdr-1.7.10 diverse Plugins
    VDR 2 (HD) : MSI G41M-P25, 2 GB RAM, E6700 2x3.20GHz, Gainward GT220, 2TB HD, Lirc X10, TT S2-3600 USB, TT S2-1600, - Suse 11.3 (64) NvidiaTreiber 260.19 vdr-1.7.18 - xineliboutplugin 1.0.90 cvs, xine-lib 1.1.90 , s2-liplianin DVB Treiber

  • Und noch gleich was:


    Mit der letzten GIT-Version habe ich nun Probleme bei Aufnahmen mit AC3 auf ProSieben (z.B. Terra Nova, Touch), andere Sender noch nicht getestet.
    Sobald es auf die Werbung zugeht, kommt bereits der Ton der Werbung, es läuft aber noch das Bild des Films weiter, wo dann logischerweise der Ton des Films fehlt.
    Wenn es von der Werbung wieder auf den Film zugeht ist es entsprechend andersherum, es läuft noch Werbung aber es kommt schon der Ton vom Film.
    Das Ganze ist reproduzierbar mit mehreren Aufnahmen und lief vor dem AV-Sync-Rewrite noch anstandslos. Getestet mit und ohne AC3_DRIFT_CORRECTION.


    Hier das schmale Log, was kurz nach einem Übergang ausgeworfen wird:

    Code
    1. Apr 3 19:18:13 vdr vdr: audio/alsa: using ac3 device 'hdmi:AES0=0x6,CARD=1'
    2. Apr 3 19:18:13 vdr vdr: audio/alsa: delay 264ms
    3. Apr 3 19:18:18 vdr vdr: audio/alsa: wait underrun error? 'Datenübergabe unterbrochen (broken pipe)'
    4. Apr 3 19:18:24 vdr vdr: video: decoder buffer empty, duping frame (745/6214) 0 v-buf
    5. Apr 3 19:18:24 vdr vdr: video: 13:22:39.758-6719 346 520/\ms 189 v-buf


    CafeDelMar


  • Kann ich bestätigen. Ist auch bei mir so mit dem nebeneffekt das nach Schnittmarkensprung der Ton um ca. 2s verschoben ist. Ein Stop und Restart der Wiedergabe bringt wieder alles ins lot.

    RPI3, DVB-Sky S960, VDR 2.4.4, Raspbian Jessie, Onkyo AV Receiver, Panasonic Plasma.

  • Und noch gleich was:


    Mit der letzten GIT-Version habe ich nun Probleme bei Aufnahmen mit AC3 auf ProSieben (z.B. Terra Nova, Touch), andere Sender noch nicht getestet.
    Sobald es auf die Werbung zugeht, kommt bereits der Ton der Werbung, es läuft aber noch das Bild des Films weiter, wo dann logischerweise der Ton des Films fehlt.
    Wenn es von der Werbung wieder auf den Film zugeht ist es entsprechend andersherum, es läuft noch Werbung aber es kommt schon der Ton vom Film.
    Das Ganze ist reproduzierbar mit mehreren Aufnahmen und lief vor dem AV-Sync-Rewrite noch anstandslos. Getestet mit und ohne AC3_DRIFT_CORRECTION.


    Ich hatte sowas Ähnliches auch schon gemerkt, aber immer wenn ich eine Aufnahme mit Debug angeschaut habe, konnte ich es nicht reproduzieren.
    Aber es könnte mit der Werbung und einer anderer Tonspur oder anderer Zeitstempel zusammenhängen
    Werde es mal überprüfen,
    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 sowas Ähnliches auch schon gemerkt, aber immer wenn ich eine Aufnahme mit Debug angeschaut habe, konnte ich es nicht reproduzieren.
    Aber es könnte mit der Werbung und einer anderer Tonspur oder anderer Zeitstempel zusammenhängen
    Werde es mal überprüfen,
    Johns


    Also ganz genau gesagt, passiert es immer beim Wechsel von AC3 auf Stereo und umgekehrt. Beim ersten wird der AC3-Ton zu früh abgeschnitten und der Stereo-Ton zu früh eingemischt, beim zweiten ist es entsprechend andersherum. Dieser Versatz von wenigen Sekunden bleibt dann auch bei der weiteren Wiedergabe bestehen. Nur ein Stopp (keine Pause) und Neustart der Aufnahme innerhalb der gleichen Tonnorm behebt das Problem bis zum nächsten Wechsel. Es betrifft übrigens auch andere Aufnahmen mit AC3 (HD, SD, ÖR, Privat).


    CafeDelMar


    PS: Auch wenn das AC3-Problem mir/insgesamt viel viel wichtiger ist, konntest Du schon einen Blick auf meinen neuen Patch werfen? Wenn ich hier wüsste, wie ich das AutoCrop wieder zentrieren kann, baue ich das auch gerne direkt selbst ein.

  • PS: Auch wenn das AC3-Problem mir/insgesamt viel viel wichtiger ist, konntest Du schon einen Blick auf meinen neuen Patch werfen? Wenn ich hier wüsste, wie ich das AutoCrop wieder zentrieren kann, baue ich das auch gerne direkt selbst ein.


    Nicht richtig.
    Bin noch am überlegen ob CutLeftRight und CutTopBottom besser ist als CutWidth und CutHeight.

    Code
    1. decoder->CropWidth = decoder->InputWidth - decoder->CropX * 2;
    2. decoder->CropHeight = decoder->InputHeight - decoder->CropY * 2;


    Müsste es wieder in der Mitte platzieren.
    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

  • Bin noch am überlegen ob CutLeftRight und CutTopBottom besser ist als CutWidth und CutHeight.


    CutLeftRight und CutTopBottom wären etwas präziser, da damit unterstrichen wird, dass an jeweils beiden Seiten etwas abgeschnitten wird.
    ZoomWidth und ZoomHeight wäre wohl das gängigste, aber da geht man dann wohl eher von einem Zoom-Faktor in Prozent und nicht in abzuschneidenden Pixeln aus. ;-)


    Sag einfach, wie es Dir am besten gefällt und ich ändere das ggf, ist ja keine große Sache.


    Müsste es wieder in der Mitte platzieren.


    Oh, klar, ist ja logisch, hatte ich beim ersten Patch aber auch schon übersehen. Ich habe es bereits geändert und werde es schnellstmöglich testen.

  • Also ganz genau gesagt, passiert es immer beim Wechsel von AC3 auf Stereo und umgekehrt. Beim ersten wird der AC3-Ton zu früh abgeschnitten und der Stereo-Ton zu früh eingemischt, beim zweiten ist es entsprechend andersherum. Dieser Versatz von wenigen Sekunden bleibt dann auch bei der weiteren Wiedergabe bestehen. Nur ein Stopp (keine Pause) und Neustart der Aufnahme innerhalb der gleichen Tonnorm behebt das Problem bis zum nächsten Wechsel. Es betrifft übrigens auch andere Aufnahmen mit AC3 (HD, SD, ÖR, Privat).


    Das Problem war, daß bei Wiedergabe von Aufnahmen ca. 7s an Ton gepuffert wurden.
    Ich habe die Puffer auf normal 1/4s - 1s reduziert. Hoffe es gibt keine Probleme mit dem DVD Plugin.
    MP3 Plugin läuft, habe gleich die 100% CPU Benutzung wieder in Ordnung gebracht.


    Bei LiveTv und Aufnahmen verschwinden noch die 1/4s bis 1s, beim Übergang von AC3 nach 2 Kanal oder umgekehrt.
    Gleiche könnte noch bei Ende der Aufnahmen passieren.
    Eine Alternative, die den Ton weiter laufen lässt, genauso wie das Bild habe ich schon angefangen, ist aber leider noch nicht fertig.


    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

  • Hallo Johns,


    anbei ist jetzt der finale Patch gegen die aktuelle GIT-Version.


    Die BBC empfiehlt einen minimalen Overscan von etwa 3,5%, womit sich folgende Werte ergeben:

    Code
    1. softhddevice.576i.CutLeftRight = 13
    2. softhddevice.576i.CutTopBottom = 10
    3. softhddevice.720p.CutLeftRight = 19
    4. softhddevice.720p.CutTopBottom = 13


    Dies scheint bisher auch ganz gut zu passen.


    CafeDelMar

  • Und folgendes ist mir noch mit der GIT-Version vom 03.04. aufgefallen:


    Bei alten PES-Aufnahmen, nur ein paar durchprobiert, kommt es zu häufigen Bildrucklern.
    Folgendes steht dann in etwa im Log:


    Das kann natürlich an der Aufnahme liegen, aber ich bin mir sicher, dass diese zuvor mit der SD-FF-Karte fehlerfrei abgespielt wurden.


    Das AutoCrop funktioniert nicht immer gut.
    Ich hatte es schon öfter, dass oben und unten (teilweise auch jeweils unterschiedlich groß) noch ein schwarzer Restbalken stehen blieb. Bei sehr dunklen Szenen konnte ich auch schon ein heftiges Hin- und Herspringen beobachten.
    Ich verwende die von Dir empfohlenen Einstellungen.
    BTW: Irgendwann für später fände ich hier die Möglichkeit eines weichen Aufziehens wie bei Xineliboutput sehr wünschenswert.


    CafeDelMar


    PS: Ich teste jetzt erstmal die aktuelle GIT mit den Problem-AC3-Videos.