amlhddevice auf Odroid C1 segfaults

  • Ich probiere gerade amlhddevice auf einem Odroid C1 unter Ubuntu trusty aus.
    Leider bekomme ich sehr früh einen Segfault:

    Code
    Program received signal SIGSEGV, Segmentation fault.
    __memcpy_neon () at ../ports/sysdeps/arm/armv7/multiarch/memcpy_impl.S:590
    590	../ports/sysdeps/arm/armv7/multiarch/memcpy_impl.S: No such file or directory.
    (gdb) bt
    #0  __memcpy_neon () at ../ports/sysdeps/arm/armv7/multiarch/memcpy_impl.S:590
    #1  0xb6c3ec00 in memcpy (__len=<optimized out>, __src=0xb2bc5008, __dest=<optimized out>) at /usr/include/arm-linux-gnueabihf/bits/string3.h:51
    #2  cFbRawOsd::Flush (this=0x2c2838) at fbosd.c:60
    #3  0x000c5070 in cSkinLCARSDisplayChannel::Flush (this=0x2c0ff0) at skinlcars.c:672
    #4  0x0009afc4 in cDisplayChannel::cDisplayChannel (this=0x2c0448, Number=1, Switched=<optimized out>) at menu.c:4381
    #5  0x0006755e in main (argc=<optimized out>, argv=<optimized out>) at vdr.c:1010


    Hier das Syslog dazu.
    Diese Zeile irritiert:

    Code
    May 29 12:39:50 c1 vdr: [3189] amlhddevice: failed to write U:1280x720p-0#012 to /sys/class/graphics/fb1/mode (-22)


    Ist das wichtig?


    Ich verwende amlhddevice von Heute aus dem git.


    Gebaut habe ich es so:

    Code
    INCLUDES=-I/usr/include/amcodec/ LDLIBS="-L/usr/lib/aml_libs -lamcodec -lamadec -lamavutils -lasound" make


    Leider ist der Segfault selbst in dem binary Blob von Amlogic. Bin ich da jetzt chancenlos oder ist die Ursache eine Andere?


    Gerald


    HP Proliant MicroServer Gen8, Xeon E3-1230, 12 GB RAM, 3xWD red 2TB im RAID 5, 2xSundtek MediaTV Home DVB-C/T, L4M TWIN-C/T, Ubuntu Server 14.04.1, Plex Media Server
    Samsung UE55H6470

  • Ich habe mal die Argumente des memcpy in fbosd.c:60 ausgeben lassen:

    Code
    amlhddevice: dst: 0xb6f4dc98, src: 0xb2b6f008, Width: 1112, tColor size 4


    Ist aber auf den ersten Blick nicht sonderlich aufregend.


    Gerald


    HP Proliant MicroServer Gen8, Xeon E3-1230, 12 GB RAM, 3xWD red 2TB im RAID 5, 2xSundtek MediaTV Home DVB-C/T, L4M TWIN-C/T, Ubuntu Server 14.04.1, Plex Media Server
    Samsung UE55H6470

  • Witzig: Ich habe mal aus Spaß Flush() gleich wieder mit return verlassen und ich habe Live-TV!


    Sobald ich eine Taste drücke habe ich dann aber kein Bild mehr, vdr läuft aber noch.


    Gerald


    HP Proliant MicroServer Gen8, Xeon E3-1230, 12 GB RAM, 3xWD red 2TB im RAID 5, 2xSundtek MediaTV Home DVB-C/T, L4M TWIN-C/T, Ubuntu Server 14.04.1, Plex Media Server
    Samsung UE55H6470

  • Ich denke es liegt alles daran, dass amlhddevice versucht einen Framebuffer mit einem Mode einzurichten den es gar nicht gibt:

    Code
    oot@c1:/etc/vdr/conf.d# cat /sys/class/graphics/fb1/modes 
    U:32x32p-0
    U:1920x1080p-0


    1280x720 gibt es nur bei fb0:

    Code
    root@c1:/etc/vdr/conf.d# cat /sys/class/graphics/fb0/modes 
    U:1920x1080p-0
    U:1280x720p-0


    Es wird dann ein framebuffer 32x32 genommen, aber dann daran vorbei zugegriffen.
    Wenn ich testweise das OSD auf fb0 ausgebe dann kommt kein segfault mehr, aber ich sehe natürlich das OSD nicht, weil es vom Live-Tv überschrieben wird.
    Nehme ich jedenfalls an.


    Leider gibt es einen Fehler wenn ich stattdessen fb1 auf den Modus 1920x1080 setzte:

    Code
    May 29 20:46:10 c1 vdr: [1968] amlhddevice: failed to write U:1920x1080p-0#012 to /sys/class/graphics/fb1/mode (-12)


    Der mir nichts sagt.


    Auferdem bekomme ich ständig diese Meldungen:

    Code
    May 29 20:53:33 c1 kernel: [ 6237.284831@1] [dsp]dsp_open
    May 29 20:53:33 c1 kernel: [ 6237.284844@1] audiodsp prevent sleep
    May 29 20:53:33 c1 kernel: [ 6237.285257@1] [dsp]can't load the audiodsp_codec_mad.bin,err=-2
    May 29 20:53:33 c1 kernel: [ 6237.285508@1] load microcode error
    May 29 20:53:33 c1 kernel: [ 6237.285527@1] [dsp]dsp_release
    May 29 20:53:33 c1 kernel: [ 6237.285534@1] audiodsp allow sleep


    Das Firmware-File habe ich schon im Netz gefunden, weiß aber noch nicht wo es hingehört.


    Gerald


    HP Proliant MicroServer Gen8, Xeon E3-1230, 12 GB RAM, 3xWD red 2TB im RAID 5, 2xSundtek MediaTV Home DVB-C/T, L4M TWIN-C/T, Ubuntu Server 14.04.1, Plex Media Server
    Samsung UE55H6470

  • Hallo Gerald


    Es wird dann ein framebuffer 32x32 genommen, aber dann daran vorbei zugegriffen.
    Wenn ich testweise das OSD auf fb0 ausgebe dann kommt kein segfault mehr, aber ich sehe natürlich das OSD nicht, weil es vom Live-Tv überschrieben wird.
    Nehme ich jedenfalls an.

    Der aktuelle OSD-Code in amlhddevice ist für die Wetek Play geschrieben und die Werte noch hart codiert. Die Wetek Play instanziert, wenn ich mich recht erinnere, 2 Framebuffer gleicher Grösse, den einen im RGB- und den anderen (jener fürs OSD) im ARGB-Format, also mit Transparenz. Die Odroids hingegen nutzen den zweiten Framebuffer für die Darstellung des Cursors, weshalb dieser nur 32x32px gross ist. Beim Versuch des Plugins, diesen für die Darstellung des OSDs zu benutzen, kommt es dadurch natürlich zum Crash. Ich habe vor, dem Plugin künftig das Framebuffer-Device fürs OSD als Parameter zu übergeben, und dann Grösse und Format zu überprüfen, bevor ich darauf zugreife.


    Die Ausgabe des Videos erfolgt, soweit ich das verstehe, auf einem eigenen, unabhängigen Layer. Solange die beiden Framebuffer entweder Transparent oder deaktiviert sind, sollte also die Videoausgabe sichtbar sein.


    Das Firmware-File habe ich schon im Netz gefunden, weiß aber noch nicht wo es hingehört.

    Ich habe diese einfach nach /lib/firmware kopiert.


    Gruss
    Thomas

  • Die Ausgabe des Videos erfolgt, soweit ich das verstehe, auf einem eigenen, unabhängigen Layer. Solange die beiden Framebuffer entweder Transparent oder deaktiviert sind, sollte also die Videoausgabe sichtbar sein.


    Ah, okay, deshalb sehe ich video. Sollte dann nicht OSD kommen, wenn ich auf fb0 wechsele?

    Ich habe diese einfach nach /lib/firmware kopiert.


    Muss ich mal ausprobieren. Dachte eigentlich ich hätte es schon gemacht.


    Gerald


    HP Proliant MicroServer Gen8, Xeon E3-1230, 12 GB RAM, 3xWD red 2TB im RAID 5, 2xSundtek MediaTV Home DVB-C/T, L4M TWIN-C/T, Ubuntu Server 14.04.1, Plex Media Server
    Samsung UE55H6470

  • Hallo zusammen,
    ich habe mit der Änderung siehe unten OSD und Video, allerdings bisher ohne Ton auf einen OdroidC0. (Hatte bisher vergessen "new cFbOsdProvider("/dev/fb1");" auch nach fb0 zu ändern.)


    Scheinbar funktioniert dies so, obwohl ich nur 1 (ok 2) Framebuffer habe!? Siehe unten:


    reufer: Kann man dies so machen? Benötigt man für die Videoausgabe nicht auch ein fb?


    Gruß, Uwe


    Framebuffer:


    Änderung:

  • Hallo Uwe


    Scheinbar funktioniert dies so, obwohl ich nur 1 (ok 2) Framebuffer habe!? Siehe unten:


    reufer: Kann man dies so machen? Benötigt man für die Videoausgabe nicht auch ein fb?

    Ein Framebuffer wird nur für das OSD benötigt, die Videoausgabe funktioniert davon unabhängig - die Idee ist, irgendwann mal dem Plugin nur noch das Framebuffer-Device als Parameter für die OSD-Ausgabe zu übergeben, dann kann der ganze Kram um die Framebuffer-Um-/und Abschaltung komplet extern vor dem VDR-Start geschehen.


    An der Odoid-Front kämpfe ich aktuell auch mit dem Ton: Beim Kernel für den C2 ist die DSP-Unterstützung nicht komplett und beim C1 springt der Decoder zwar an, aber ich schaffe es nicht, den Ton via Alsa über die USB-Soundkarte auszugeben.


    Gruss
    Thomas

  • Hallo Thomas,
    ok, danke für die Info.
    Mir sind ein paar Sachen bisher aufgefallen:
    - Das umschalten (mit satip Plugin) dauert hier auch recht lange. Auf der wetekplay (openelec) geht das recht flott (allerdings hier mit Ton).
    - es gibt große Unterschiede zwischen HD und SD Sendern. bei HD Sendern gibt es weniger ruckler.


    Aber immerhin, ich sehe schon was. :D


    Nun kann ich mir DVB-T2 zumindest schonmal anschauen. ;)


    Viele Grüße, Uwe

  • Mir sind ein paar Sachen bisher aufgefallen:
    - Das umschalten (mit satip Plugin) dauert hier auch recht lange. Auf der wetekplay (openelec) geht das recht flott (allerdings hier mit Ton).
    - es gibt große Unterschiede zwischen HD und SD Sendern. bei HD Sendern gibt es weniger ruckler.

    Danke für die Rückmeldung! Ich muss hier aber trotzdem anmerken, dass das Plugin noch einen sehr experimentellen Stand hat. Aber auch ich habe bisher den Eindruck, dass es auf der Wetek Play aktuell am "besten" läuft - zumindest bei Live-TV.


    Gruss
    Thomas

  • Zitat

    An der Odoid-Front kämpfe ich aktuell auch mit dem Ton: Beim Kernel für den C2 ist die DSP-Unterstützung nicht komplett und beim C1 springt der Decoder zwar an, aber ich schaffe es nicht, den Ton via Alsa über die USB-Soundkarte auszugeben.


    Bekommst du mit den libamcodec Tools Sound aus der lib am OdroidC1?


    Mit einfachen Audiotools wie "play" habe ich Audio über HDMI.
    Wo ist der Unterschied? Über libamcodec wird Video und Audio Hardwarebeschleunigt?


    Gruß, Uwe

  • Hi Uwe

    Bekommst du mit den libamcodec Tools Sound aus der lib am OdroidC1?

    Beim Odroic C1 konnte ich mangels TV den Ton über HDMI noch nicht testen, aber die Logs sehen zumindest gleich aus wie bei der Wetek Play, und dort funktioniert es. Der USB-Audioadapter blieb stumm, aber das ist vermutlich ein anderes Problem.


    Wo ist der Unterschied? Über libamcodec wird Video und Audio Hardwarebeschleunigt?

    Die Hardwarebeschleunigung ist weniger der Punkt, mehr die automatische Synchronisation des Videos, wenn beides über libamcodec läuft. Kodi funktioniert hier anders, da wird Audio mit ffmpeg decodiert und die Video-Frames manuell dazu synchronisiert - dazu habe ich eigentlich keine Lust.


    Gruss
    Thomas

  • Nur noch zur Info. ;)
    Hier kommt über HDMI kein Ton mit dem OdroidC1. Hier mal die Kernel-logs:
    Die Firmware-m8 aus dem libamcodec Paket habe ich verwendet.


    Viele Grüße, Uwe


    PS: gestern habe ich mit dem OdroidC1 unter Kodi mit tvheadend die beiden DVB-T2 Sender ARD-HD und ZDF-HD getestet. Funktioniert mit einer CPU-Last von ~3% :D Die Qualität ist für terrestrisch einfach Super.

Jetzt mitmachen!

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