softhdcuvid jetzt mit VAAPI und HDR support

  • Ja AudioStartThreshold * 6 hatte ich schon probiert. Das Problem ist das beim starten einer Aufnahme von der Platte der VDR die Puffer so voll pumpt das das auch nix nützt.

    Der Decoder ist nicht zu langsam es wird ja alles in HW dekodiert. Nur es müssen ja auch Video Frames kommen die man wegwerfen könnte, Meistens reicht es ja auch aus ein Frame zu verwerfen. Nur ich habe festgetellt das die PTS differenz zwischen Video und Audio doch immer mal wieder wackelt. UNd dann kommt es dazu das ein Frame verworfen wird nur um gleich das nächste wieder zu verdoppeln. Evtl. liegt es ja wirklich am Audio und dein Mutex verbessert es. Bin gespannt ob du Erfolg damit hast. Dann übernehme ich es :)

  • Evtl. liegt es ja wirklich am Audio und dein Mutex verbessert es. Bin gespannt ob du Erfolg damit hast. Dann übernehme ich es

    Den Mutex kannst Du schon einbauen. Die PTS von Audio stimmt ab und zu nicht.

    Einen zweiten Punkt hab ich noch gefunden. Wenn ein Audio Packet in den Ringbuffer geschrieben wird wird die PTS gesetzt. Die ist aber für das erste Sample im Packet. Beim Ermitteln der Audio PTS wird die aber für das letzte Sample angenommen. Ich füge beim Setzen der PTS jetzt die Zeit die das Packet beinhaltet zur PTS hinzu.

  • Den Mutex kannst Du schon einbauen. Die PTS von Audio stimmt ab und zu nicht.

    Einen zweiten Punkt hab ich noch gefunden. Wenn ein Audio Packet in den Ringbuffer geschrieben wird wird die PTS gesetzt. Die ist aber für das erste Sample im Packet. Beim Ermitteln der Audio PTS wird die aber für das letzte Sample angenommen. Ich füge beim Setzen der PTS jetzt die Zeit die das Packet beinhaltet zur PTS hinzu.

    Ich warte dann mal auf dein GIT :)

    Habe etwas mit dem AudioStartThreshold rumgespielt und bei AudioStartThreshold * 10 läuft Audio nicht unkontrolliert los bei starten einer Aufnahme und dann schafft es auch AudioVideoReady das sinnvoll zu starten. Danach ist Video leicht vor dem Audio (pts diff ist positiv) und } else if (diff > 55 * 90) { hält das auch so im positiven. Damit funktioniert es ganz gut. Zur sicherheit habe ich mal ne Routine zum einfügen von Stille gemacht um zu sehen ob das dann noch zuschlägt im laufe der Zeit. Ich probiere das erst mal hier aus um zu sehen das es klappt.

  • Ich hab mir die Tage für mich eine neue KIste mit Ryzen APU zusammengebastelt, und wollte mir das aus Interesse mal ansehen. Im Moment geht das Plugin nur leider nicht durch meinen Compiler auf Ubuntu 19.10. Neben einigen Warnungen gibt das hier einen harten Fehler:

    Code
    video.c:542:10: error: conflicting types for 'gettid'
      542 | uint64_t gettid()
          |          ^~~~~~
    In file included from /usr/include/unistd.h:1170,
                     from video.c:68:
    /usr/include/x86_64-linux-gnu/bits/unistd_ext.h:34:16: note: previous declaration of 'gettid' was here
       34 | extern __pid_t gettid (void) __THROW;
          |                ^~~~~~

    Ubuntu Eoan (19.10) bringt glibc 2.30 mit, ab der gettid eine eigene Deklaration darin hat. Soweit ich das überblicke ist der Fix recht simpel, ich hab gerade fix einen Pull Request gemacht, der das lösen müsste.

    - HTPC mit zerbasteltem Yavdr 0.6 , Origen ae X15e, MCE Remote, Asus P5N7A-VM, 1x Digibit R1, Kodi und vdr an Pana 46PZ85E
    - Diverse HTPCs im Umfeld bei Familie und Freundenm die sich vor mir fürchten, mit allen möglichen gruseligen Konfigurationen.
    Auch gern Debian, aber wehe jemand kommt mir mit Suse.

  • Ich hab mir die Tage für mich eine neue KIste mit Ryzen APU zusammengebastelt, und wollte mir das aus Interesse mal ansehen. Im Moment geht das Plugin nur leider nicht durch meinen Compiler auf Ubuntu 19.10. Neben einigen Warnungen gibt das hier einen harten Fehler:

    Code
    video.c:542:10: error: conflicting types for 'gettid'
      542 | uint64_t gettid()
          |          ^~~~~~
    In file included from /usr/include/unistd.h:1170,
                     from video.c:68:
    /usr/include/x86_64-linux-gnu/bits/unistd_ext.h:34:16: note: previous declaration of 'gettid' was here
       34 | extern __pid_t gettid (void) __THROW;
          |                ^~~~~~

    Ubuntu Eoan (19.10) bringt glibc 2.30 mit, ab der gettid eine eigene Deklaration darin hat. Soweit ich das überblicke ist der Fix recht simpel, ich hab gerade fix einen Pull Request gemacht, der das lösen müsste.

    Du kannst das gettid in video.c einfach rauswerfen.

  • Hi,

    ich teste gerade softhdvaapi unter Fedora 31. vaapi/egl und vaapi/libplacebo funktionieren beide grundsätzlich. CPU-Load ist bei allen drei Varianten (egl, libplacebo/binlinear und dem gepatchten softhddevice (letzte Version von pesintta, bevor es vaapidevice wurde...)) bei RTL HD ähnlich hoch. Debuglog (egl):

    Display Spoiler

    Oct 10 18:39:46 nuc vdr[1701]: Set Playmode 0

    Oct 10 18:39:46 nuc vdr[1701]: video: set closing

    Oct 10 18:39:46 nuc vdr[1701]: video: set clock --:--:--.---

    Oct 10 18:39:46 nuc vdr[1701]: video: reset start

    Oct 10 18:39:46 nuc vdr[1701]: video: set clock --:--:--.---

    Oct 10 18:39:46 nuc vdr[1701]: video: new stream start

    Oct 10 18:39:46 nuc vdr[1701]: [1715] switching to channel 3 S19.2E-1-1057-61200 (RTL HD)

    Oct 10 18:39:46 nuc vdr[1701]: [1715] DVBAPI: 0.0 set CAM decrypt (SID 61200 (0xEF10), caLm 4, HasCaDescriptors 1)

    Oct 10 18:39:46 nuc vdr[1701]: video/cuvid: closing eof

    Oct 10 18:39:47 nuc vdr[1701]: Set Playmode 1

    Oct 10 18:39:47 nuc vdr[1701]: video: set trick-speed 0

    Oct 10 18:39:47 nuc vdr[1701]: audio/alsa: using device 'pcm.51to20'

    Oct 10 18:39:47 nuc vdr[1701]: video: new stream 889ms

    Oct 10 18:39:47 nuc vdr[1701]: [softhddev] invalid PES video packet

    Oct 10 18:39:47 nuc vdr[1701]: pesdemux: pes start code id 0xbd

    Oct 10 18:39:47 nuc vdr[1701]: pesdemux: new codec 000000 -> 0x15003

    Oct 10 18:39:47 nuc vdr[1701]: codec: using audio codec ID 0x15003 (ac3)

    Oct 10 18:39:47 nuc vdr[1701]: in VideoDecode make close

    Oct 10 18:39:47 nuc vdr[1701]: CodecVideoClose

    Oct 10 18:39:47 nuc vdr[1701]: codec: audio 'ATSC A/52A (AC-3)'

    Oct 10 18:39:47 nuc vdr[1701]: codec/audio: format change fltp 48000Hz *2 channels

    Oct 10 18:39:47 nuc vdr[1701]: codec/audio: resample fltp 48000Hz *2 -> s16 48000Hz *2

    Oct 10 18:39:47 nuc vdr[1701]: audio/alsa: start delay 336ms

    Oct 10 18:39:47 nuc vdr[1701]: [softhddev] 2 invalid PES video packet(s)

    Oct 10 18:39:47 nuc vdr[1701]: video: h264 detected

    Oct 10 18:39:47 nuc vdr[1701]: CodecVideoOpen h264

    Oct 10 18:39:47 nuc vdr[1701]: ***************codec: Video Open using video codec ID 0x001b (h264)

    Oct 10 18:39:47 nuc vdr[1701]: codec: video 'H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10'

    Oct 10 18:39:47 nuc vdr[1701]: codec: can use own buffer management

    Oct 10 18:39:47 nuc vdr[1701]: codec: supports frame threads

    Oct 10 18:39:47 nuc vdr[1701]: codec: supports slice threads

    Oct 10 18:39:47 nuc vdr[1701]: Codec open 0

    Oct 10 18:39:47 nuc vdr[1701]: Initializing cuvid hwaccel thread ID:1716

    Oct 10 18:39:47 nuc vdr[1701]: video: ready --:--:--.--- 0ms/frame 1177ms

    Oct 10 18:39:47 nuc vdr[1701]: Cuvid_get_format: codec 27 fmts:

    Oct 10 18:39:47 nuc vdr[1701]: #0110x0000002e vaapi_vld

    Oct 10 18:39:47 nuc vdr[1701]: Cuvid_get_format: codec 27 fmts:

    Oct 10 18:39:47 nuc vdr[1701]: #0110x0000002e vaapi_vld

    Oct 10 18:39:47 nuc vdr[1701]: video profile 100 codec id 27

    Oct 10 18:39:47 nuc vdr[1701]: video: create decoder 16bit?=0 1920x1080 old 1280 720

    Oct 10 18:39:47 nuc vdr[1701]: Cuvid Clean up

    Oct 10 18:39:47 nuc vdr[1701]: video/cuvid: CuvidDestroySurfaces

    Oct 10 18:39:47 nuc vdr[1701]: Last decoder closes

    Oct 10 18:39:47 nuc vdr[1701]: video/cuvid: CuvidCreateSurfaces: 1920x1080 * 7

    Oct 10 18:39:47 nuc vdr[1701]: video/vdpau: create 7 Textures Format NV12 w 1920 h 1080

    Oct 10 18:39:47 nuc vdr[1701]: video: aspect 6080:3429 Resolution 3

    Oct 10 18:39:47 nuc vdr[1701]: video: slow down video, duping frame

    Oct 10 18:39:47 nuc vdr[1701]: video: normal aspect output 1915x1080+2+0 Video 1920x1080

    Oct 10 18:39:47 nuc vdr[1701]: CUVID Init ok 1920x1080

    Oct 10 18:39:47 nuc vdr[1701]: Init VAAPI deint ok

    Oct 10 18:39:47 nuc vdr[1701]: ++++++++++++++++++++++++++++++++++++starte audio

    Oct 10 18:39:47 nuc vdr[1701]: BT709 Colorspace used

    Oct 10 18:39:47 nuc vdr[1701]: vor create

    Oct 10 18:39:47 nuc vdr[1701]: vor compile vertex

    Oct 10 18:39:47 nuc vdr[1701]: compile Status 1 loglen 0 ><

    Oct 10 18:39:47 nuc vdr[1701]: vor compile fragment

    Oct 10 18:39:47 nuc vdr[1701]: compile Status 1 loglen 0 ><

    Oct 10 18:39:47 nuc vdr[1701]: Link Status 1 loglen 0

    Oct 10 18:39:47 nuc vdr[1701]: get uniform colormatrix 0

    Oct 10 18:39:47 nuc vdr[1701]: nach set colormatrix

    Oct 10 18:39:47 nuc vdr[1701]: get uniform colormatrix_c 1 -0,972945

    Oct 10 18:39:48 nuc vdr[1701]: codec/audio: inital drift delay 394ms

    Oct 10 18:39:48 nuc vdr[1701]: video: slow down video, duping frame

    Oct 10 18:39:48 nuc vdr[1701]: video/cuvid: synced after 70 frames 2590m

    In Aufnahmen kann man leider nicht richtig vorspulen/springen, da hängt die Ausgabe für ca. 30sec oder hängt sich komplett weg!

    Display Spoiler

    Oct 10 18:44:57 nuc vdr[1701]: Clear buffer request in Poll

    Oct 10 18:44:57 nuc vdr[1701]: video: reset start

    Oct 10 18:44:57 nuc vdr[1701]: video: set clock --:--:--.---

    Oct 10 18:44:57 nuc vdr[1701]: audio/alsa: using device 'pcm.51to20'

    Oct 10 18:44:57 nuc vdr[1701]: [softhddev]Clear: 0ms buffers 0

    Oct 10 18:44:57 nuc vdr[1701]: audio/alsa: start delay 336ms

    Oct 10 18:44:57 nuc vdr[1701]: ++++++++++++++++++++++++++++++++++++starte audio

    Oct 10 18:44:58 nuc vdr[1701]: codec/audio: drift( 0) -120256ms reset

    Oct 10 18:44:58 nuc vdr[1701]: codec/audio: inital drift delay 1477ms

    Oct 10 18:46:11 nuc vdr[1701]: Set Playmode 0

    Oct 10 18:46:11 nuc vdr[1701]: audio/alsa: using device 'pcm.51to20'

    Oct 10 18:46:11 nuc vdr[1701]: [softhddev]Clear: 20ms buffers 246

    Oct 10 18:46:11 nuc vdr[1701]: video: set closing

    Oct 10 18:46:11 nuc vdr[1701]: video: set clock --:--:--.---

    Oct 10 18:46:11 nuc vdr[1701]: video: reset start

    Oct 10 18:46:11 nuc vdr[1701]: video: set clock --:--:--.---

    Oct 10 18:46:11 nuc vdr[1701]: video: new stream start

    Oct 10 18:46:11 nuc vdr[1701]: audio/alsa: start delay 336ms

    Wenn mein Skin "skinflatplus" aktiviert ist, startet die egl-Version erst gar, mit libplacebo manchmal, manchmal mit SIGSEGV, anbei die Meldung, wenn es mal startet:

    Display Spoiler

    Oct 10 19:00:37 nuc vdr[3032]: Init Placebo

    Oct 10 19:00:37 nuc runvdr[3032]: INTEL-MESA: warning: ../src/intel/vulkan/anv_device.c:151: The kernel reported a GTT size larger than 2 GiB but not support for 48-bit addresses

    Oct 10 19:00:37 nuc vdr[3032]: dma_buf support in Vulkan available


    Wie ich das jetzt debuggen soll, weiß ich leider nicht. Wenn das Plugin mit dem Spulen zurechtkommt und das Problem mit skinflatplus geklärt ist, fehlt nicht mehr viel, dass man es praktisch auch mit Intel benutzen kann.

    System 1: Hardware : ASUS B150M-C, Intel Pentium G4560, DVB cineS2, 1x 2TB HDD, 1x 214GB SSD, Gehäuse Antec Remote Fusion Black, 8 GB DDR4 RAM.
    Software : Fedora 34, vdr 2.4.7, softhddevice GIT, Kernel 5.15.11
    System 2: Hardware : Intel NUC10i5FNK, Intel Core i5-10210U (Comet Lake), DVB TechnoTrend TT-connect S2-4600 USB, 1x 1TB NVMe, 32 GB DDR4 RAM.
    Software : Fedora 35, vdr 2.4.7, softhdcuvid, Kernel 5.15.11

  • Habe nun nochmal einen Fix für das springen in den Aufnahmen eingecheckt. Und für die CUVID Leute ist nun auch mal etwas dabei: Das Bufferhandling wurde überarbeitet und sollte nun deutlich besser laufen.

    Derzeit sieht es so aus also ob beim vaapi alle skin Plugins nicht sauber laufen. Ich habe mal mit dem skindesigner getestet und da gibt es Problme beim Skin umschalten (ansonsten läuft es wohl). Den Skinflatplus habe ich nicht aber ich denke der läuft auch nicht. Das könnte daran liegen das ich auf egl umgestellt habe und die Skins die GL Texturen nicht im richtigen EGL Kontext erstellen. Das schaue ich mir nochmal an. Derzeit ist LCARS angesagt :)

    Als Last Resort beim a/v sync schiebe ich nun Stille ins Audio. Wem das auffällt der sollte sich melden. Eigentlich sollte das im normalbetrieb nicht gebraucht werden.

    mfg

    jojo61

    PS: habe noch etwas für den skindesigner nachgeschoben

    Edited once, last by jojo61 (October 11, 2019 at 1:38 PM).

  • Die letzte Version habe ich mit vaapi/EGL getestet. Spulen und springen in Aufnahmen geht jetzt, top! Habe mal Skin testweise auf skindesigner (mit deinem Patch) umgestellt, verhält sich aber auch komisch. Das Rendering von einigen Buchstaben funktioniert da nicht, weiterhin hängt er sich dann noch kurzer Zeit auf. Ich habe außerdem folgenden Bug gefunden: PIP aktivieren, dann wieder deaktivieren -> Bild bleibt grün.

    zork

    System 1: Hardware : ASUS B150M-C, Intel Pentium G4560, DVB cineS2, 1x 2TB HDD, 1x 214GB SSD, Gehäuse Antec Remote Fusion Black, 8 GB DDR4 RAM.
    Software : Fedora 34, vdr 2.4.7, softhddevice GIT, Kernel 5.15.11
    System 2: Hardware : Intel NUC10i5FNK, Intel Core i5-10210U (Comet Lake), DVB TechnoTrend TT-connect S2-4600 USB, 1x 1TB NVMe, 32 GB DDR4 RAM.
    Software : Fedora 35, vdr 2.4.7, softhdcuvid, Kernel 5.15.11

  • PIP geht mit VAAPI derzeit nicht. Ich habe mal rumgespielt und finde den Fehler nicht. Könnte aber am FFMEPG liegen. Irgendwie scheint der Vaapidecoder nicht mitzukriegen wenn ich eine Instanz zu und wieder auf mache. Danach beschwert er sich das ich die falschen SurfaceIDs übergebe.

    mfg

    jojo61

  • Ich habe mal angefangen, Deinen Code etwas zu bereinigen und Dir einen pull request geschickt. Ich habe da noch einige Ideen für weitere Bereinigungen und Erweiterungen, würde aber, bevor ich Arbeit investiere, wissen, ob Dir so ein Vorgehen recht ist. Ich finde Dein Plugin sehr gut, es scheint mir auch das Einzige in dem Bereich zu sein, was aktiv weiterentwickelt wird. Interessieren würde mich eine Wayland-EGL Integration.

    zork

    System 1: Hardware : ASUS B150M-C, Intel Pentium G4560, DVB cineS2, 1x 2TB HDD, 1x 214GB SSD, Gehäuse Antec Remote Fusion Black, 8 GB DDR4 RAM.
    Software : Fedora 34, vdr 2.4.7, softhddevice GIT, Kernel 5.15.11
    System 2: Hardware : Intel NUC10i5FNK, Intel Core i5-10210U (Comet Lake), DVB TechnoTrend TT-connect S2-4600 USB, 1x 1TB NVMe, 32 GB DDR4 RAM.
    Software : Fedora 35, vdr 2.4.7, softhdcuvid, Kernel 5.15.11

  • zork Ich habe deinen pull request akzeptiert. Ich habe nichts dagegen wenn du weitere Bereinigungen machst. Du solltest mich nur darauf hinweisen weil ich nicht immer im github schaue ob da etwas ansteht,


    Ich entwickle das plugin weiter und habe mal auf einem Raspi 4 getestet. Das hatte ich ja oben schonmal angedeutet. Mittlerweile läuft das plugin dort auch rudimentär. Nur leider unterstützt ffmpeg auf dem Raspi 4 noch nicht den hevc decoder und deswegen habe ich das erstmal beiseite gelegt und hoffe ffmpeg wird da noch etwas tun. Daneben habe ich untersucht wie ich HDR bei Intel aktivieren kann. Das scheint mir derzeit nur über die drm Ausgabe ohne X zu gehen. Da bastele ich gerade dran rum und versuche erst mal das drm plugin von Zille auf dem NUC zum laufen zu bringen. Da Intel HDR aber nur für Gen10 Grafiken eingebaut hat fürchte ich das ich dazu auch noch den Kernel patchen muss. Das bleibt spannend :) Zumindest soll YCrCb 420 aber auch mit Gen9 und LSPCON gehen. Das würde für HDR ja reichen.

    jojo61

  • Bei mir sieht das so aus:

    Code
    root@raspberrypi4:~# ffmpeg -hide_banner -decoders | grep hevc
     VFS..D hevc                 HEVC (High Efficiency Video Coding)
     V..... hevc_v4l2m2m         V4L2 mem2mem HEVC decoder wrapper (codec hevc)

    sieht nicht nach hardware decoding aus.

    Ich habe ein angepasstes kodi installiert, das funktioniert sehr gut.

    Mein VDR

    VDR1 Mediaportal mit QVT-Board, Intel 810 Chipsatz, Pentium III 1,1 Ghz, 256 Mb Ram, WDC WD5000AAKB, DVB-S TT 1.5, Nova-S, Digidish 33, Gentoo Kernel 2.6.31, VDR 1.4.7
    VDR2 Asrock M3N78D, AMD Phenom II X6 1055T, 8 Gb Ram, Geforce GTX 950, WinTV dualHD, Gentoo Kernel 5.10, VDR 2.6.0, softhddevice
    VDR3 MC-1200, GA-B85M-HD3, Celeron G1840, Quadro P400. 4G Ram, CineS2 6, DuoFlex S2, WinTV dualHD, Gentoo Kernel 5.10, VDR 2.6.0, softhddevice
    TV TX-37LZD85F, AV VSX-520D - Consono 35


    vdr-User-# 755 to_h264 chk_r vdr-transcode github

  • jsffm Bei mir funktioniert hevc_v4l2m2m gar nicht. Zumindest decodiert er nichts. Ob das nun hardware decoding ist oder nicht ist mir erst mal egal.

    Kodi liefert ja m.E. mittlerweile sein eigenes ffmpeg mit. Da könnten anpassungen drin sein. Da habe ich aber noch nicht reingeschaut.

    Da ich für den Raspi wohl eh drm Ausgabe brauche werde ich erst mal daran weiterarbeiten.

    jojo61

  • Als ich mir den Pi4 gekauft habe, war ich mir bewusst, dass die Software Zeit braucht, bis sie damit umgehen kann. Die kodi-Anpassungen von ffmpeg werden sicherlich den Weg in den ffmpeg-Standard finden.

    Mein VDR

    VDR1 Mediaportal mit QVT-Board, Intel 810 Chipsatz, Pentium III 1,1 Ghz, 256 Mb Ram, WDC WD5000AAKB, DVB-S TT 1.5, Nova-S, Digidish 33, Gentoo Kernel 2.6.31, VDR 1.4.7
    VDR2 Asrock M3N78D, AMD Phenom II X6 1055T, 8 Gb Ram, Geforce GTX 950, WinTV dualHD, Gentoo Kernel 5.10, VDR 2.6.0, softhddevice
    VDR3 MC-1200, GA-B85M-HD3, Celeron G1840, Quadro P400. 4G Ram, CineS2 6, DuoFlex S2, WinTV dualHD, Gentoo Kernel 5.10, VDR 2.6.0, softhddevice
    TV TX-37LZD85F, AV VSX-520D - Consono 35


    vdr-User-# 755 to_h264 chk_r vdr-transcode github

  • Ich habe mit softhdcuvid das Problem, daß ich beim Verschieben von Schnittmarken (Taste 4 bzw. 6) nur sehr langsam arbeiten kann, da es eine gefühlte Ewigkeit dauert, bis nach dem Verschieben das Bild zur neuen Position angezeigt wird.

    Das hatte ich mit softhddevice nicht. Kann man da etwas feintunen?

    Christian

    PS: auf diesem Wege vielen Dank für das Plugin!

  • Da bastele ich gerade dran rum und versuche erst mal das drm plugin von Zille auf dem NUC zum laufen zu bringen.

    softhddevice-drm läuft aktuell auf Raspi (Raspi 4 wohl nicht mehr) und Rockchip. Die Unterstützung von einem NUC ist aktuell nicht vorgesehen. Das Konzept ist das die Video Wiedergabe über DRM passiert ohne X-Server. Die Ausrichtung sind die ARM Devices.

  • softhddevice-drm läuft aktuell auf Raspi (Raspi 4 wohl nicht mehr) und Rockchip. Die Unterstützung von einem NUC ist aktuell nicht vorgesehen. Das Konzept ist das die Video Wiedergabe über DRM passiert ohne X-Server. Die Ausrichtung sind die ARM Devices.

    Das ist mir vollkommen klar das dein Plugin nicht für einen NUC gedacht ist. War auch keine Kritik an dem Plugin. Ich werde aber wohl eine drm Ausgabe für HDR am NUC brauchen und da ist dein Plugin eine prima Quelle für Infos wie es geht :)

    hopsi Ich schaue mir das mit den Schnittmarken mal an. Hast du die aktuelle Version ?

Participate now!

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