Codecvergleich mit GStreamer durch SSIM

Mai 18th, 2012 by Kai

Während der Wirrungen bezüglich des HTML5-Videostandards hatte ich (noch lange bevor WebM existierte) einen Blick auf Dirac geworfen, einen alternativen Codec der BBC Research Labs. Nach subjektiven Vergleichen und einiger Benutzung, fehlte mir dennoch ein Verfahren, um mehr verlässliche Aussagen über die Qualität (sowie zu erwartende Größe) eines komprimierten Videos zu machen. Anstelle des „alten“ PSNR wurde SSIM zur Differenzanalyse zwischen Original und dem komprimierten Bild verwendet. GStreamer bietet sich durch starke Flexibilität an – ein Testframework wurde in Python mit Django umgesetzt. Leider steht der Out-of-the-box-Verwendung noch einiges im Wege; gerade die SSIM-Berechnung ist noch nicht als eigenständiges GStreamer-Element implementiert, was Geschwindigkeit und Stabilität verbessern würden. Auch die generelle Anbindung der GStreamer-Mainloop in die Webapplikation wäre besser durch einen daemon zu lösen. Daher kommt hier jetzt noch kein Quellcode…

Ausarbeitung (Kurs Digitales Video): Der Dirac-Wavelet-Codec und automatisierter Qualitätsvergleich mit Hilfe des GStreamer-Frameworks

Die erhobenen Daten sind nur beispielhaft und erheben keinen Anspruch auf vollständige Charakterisierung der Codecs. Denn der Zeitaufwand für SSIM ist groß – und somit ist die Eingabesequenz sehr kurz gewählt.

Arduino N64 Controller Library und Tetris-Port

März 26th, 2012 by Kai

Die Arduino-Plattform (arduino.cc) bietet einen einfachen Einstieg in die Microcontroller-Programmierung und ist gerade im Nicht-Geek-Bereich eine Erfolgsgeschichte. Die vielen Bibliotheken ermöglichen es, hauptsächlich auf der “Organisationsebene” zu bleiben – in kurzer Zeit war aus der Kombination von TVout, dem verfügbaren Tetris-Clone und einigen Modifikationen zum Speichern der Highscore im EEPROM eine archaische Spielkonsole aufgebaut. Dank dieser Anleitung konnte ein N64-Controller benutzt werden. Während für NES relativ viel Quellcode verfügbar ist, gibt es keine komfortable N64-Controller-Library, da wegen exaktem Timing Inline-Assembler verwendet wird und der PIN fest eingeschrieben ist. Meine Bibliothek ist vielleicht nicht in schönster Manier geschrieben und alles andere als optimal in der Codegröße, aber für eine Erstveröffentlichung sollte es ausreichen – komfortabel ist sie zumindest (auch alle möglichen PINs von 0 bis 13 können unabhängig voneinander für Controller benutzt werden).

Die Lizenz ist unklar, es handelt sich hauptsächlich um Modifikationen und Zusammenstellungen. Der Tetris-Port “Simple Tetris Clone” ist z.B. unter der MIT-License veröffentlicht, die meisten Bibliotheken unter der (L)GPL.

Version 1 der Library (26.03.2012),

getestet auf Arduino Uno: N64Controller

Hier der Quellcode für das Spiel: N64Tetris

Beispielquellcode:

#include <N64Controller.h>
N64Controller player1 (12); // PIN 12
void setup() {
    player1.begin(); // Initialisierung
}
void loop() {
    delay(30);
    player1.update(); // Tastenzustand auslesen
    if (player1.button_A() && player1.button_D_down()
        || player1.button_Start()) { // bitte keinen Sinn suchen
        int xachse = player1.axis_x(); // kann negativ oder positiv sein,
                                   // je nach Ausrichtung des Analog-Sticks
    }
    // …
}

Der ZPAQ-Kompressionsstandard für mehr Kompatibilität

März 4th, 2012 by Kai

Auf der Suche nach der weltbesten Kompression stieß ich vor einigen Jahren auf die PAQ-Familie. Immer wieder gab es Optimierungen, die die bisherigen Benchmarks noch übertrumpften. Aus den vielen Versionen konnte sich keine Basis herauskristallisieren, weil der Wunsch nach Perfektion anscheinend zu groß ist. Matt Mahoney ist auf dem Gebiet der Kompression durchaus bewandert und war federführend in der Entwicklung der PAQ-Kompressoren. Um das Problem zu lösen erfand er eine Sprache, welche ein Komprimierungsverfahren kompakt darstellen kann. Dies ermöglicht es, dass es eingebunden in einem Archiv dennoch von allen anderen, die das Verfahren vorher nie in dieser Form kannten, ausgeführt werden kann. So bleibt die Möglichkeit erhalten, neue Verfahren zu entwickeln und trotzdem einen Standard zu haben, sodass sich nicht erst eine neue Software zur Verwendung etablieren müsste.

ZPAQL, wie die Sprache heißt, ist »wohldefiniert« und hat in letzter Zeit nur eine kleine Erweiterung bekommen, die die Kompatibilität aber nicht verletzt. Es gibt verschiedene Implementierungen wie zpipe, zp (parallel) und zpaq, die jedoch noch nicht an die Unixkonformität der xz-utils reichen. Es gibt schon viele “Models”/Configs, die entweder auf Geschwindigkeit oder auf starke Kompression getrimmt sind, die Waage zu halten ist wie immer eine Herausforderung. Für spezielle Datentypen existieren auch Konfigurationen wie JPEG/BMP/x86.

Ursprünglich setzte die libzpaq auf GCC, um performanten Code zur Laufzeit zu erzeugen – notfalls wurde interpretiert. Die neuste Version unterstützt JIT-Kompilierung für 32- und 64-Bit-Umgebungen, ARM (noch) ausgeschlossen. Da es “hardcoded” ist, bleibt die Länge des Quelltextes noch im überschaubaren Rahmen. Eine Benutzung von LLVM wäre für die Portabilität jedoch hilfreich. Mir kam der Gedanke, ob diese geniale Entwicklung auch für Verschlüsselung sinnvoll sein könnte. Da dort die Sicherheit des Codes nach dem Menschen die höchsten Risiken birgt, glaube ich uns mit wenigen, gut überprüften Libs in besser Gesellschaft.

In den Debian/Ubuntu-Quellen ist im Moment noch die alte Version von zpaq enthalten. Eine Integration in file-roller, den Standardarchiver von GNOME, mit sinnvoller Verwaltung der zur Wahl verfügbaren Algorithmen steht noch aus.

Openmoko

März 4th, 2012 by Kai

Seit 2008/2009 benutze ich das „Neo Freerunner“ GTA02 des Openmoko-Projekts als Mobiltelefon. Es unterstützt GPS, Bluetooth, W-LAN, Lagesensoren, GPRS-Internet über GSM, Touchscreen, NAND- und NOR-Flash für zwei Bootloader und 256 MB Systemspeicher, 128 MB RAM, µSD und einen USB-Hostmode (nur der maximale Stromfluss gibt also das Limit – USB-Sticks und Maus sind kein Problem).

Aus der Vielfalt der portierten Linux-Distributionen benutzte ich im Moment Debian auf der SD-Karte mit dem Freesmartphone-Stack und vollem X-Support. Auf dem internen Speicher läuft ein Android.

Vorteile der offenen Hard- und Software sind die Freiheiten, die damals im mobilen Bereich undenkbar waren. Auch das später aufgetauchte Android kann da nicht ganz rankommen. Mal schnell ein AdHoc-LAN aufmachen und per SSH verbinden über USB-LAN sollten auch dort jetzt möglich sein, aber X-Forwarding und unter Debian IP-Forwarding durch iptables einzurichten sind Luxus. Das Openmoko erschien auch vor dem iOS und war Vorreiter für Maemo in der Open-Source-Szene.

So hatte ich eine lange Zeit die Offline-Wikipedia auf meinem Gerät laufen. Navigieren war mit Navit halbwegs benutzbar und der FBReader ließ mich schon viele EPUB-EBooks unterwegs lesen. Die API des FSO-Stacks bietet viele Kontrollmöglichkeiten über die Telefonfunktionen und ist eine Erweiterung zu den normalen Standards des heutigen Linuxdesktops (z.B. sudo und das mögliche Merken der Legitimierung). Suspend verläuft so, wie es unter Debian ist – »Wake up on GSM« oder wie ich es nennen will, hat äußerst gut funktioniert. So wurde zwischen Anrufen und SMS nahezu nichts an Strom verbraucht. Android ist eher oft im Halbschlaf und wacht – bei mir zumindest – zur vollen Stunde auf, um etwaige weitere Aufwachpunkte festzulegen.

Da ich mit dem aktuell in Debian verfügbaren Interface nicht komplett zufrieden bin, hoffe ich etwas auf Tizen und Boot2Gecko. Mein Favorit wäre jedoch ein GNOME Mobile-Interface, welches auf der GNOME Shell basiert… Epiphanys Web-Apps sind da bestimmt auch praktisch. Mit Wayland und Touchmöglichkeiten von GTK könnte das ja noch kommen.

Nachteil des Freerunners ist die immer mehr veraltende Hardware – Grafikbeschleunigung ist fast unmöglich, die CPU langsam und IO ist sowieso fast immer ein Problem.

Diese Probleme zu beheben hat sich eine aus der Openmoko-Community entstandene Gruppe auf die Fahne geschrieben und bietet mit dem GTA04 ein neues Board für das alte Gehäuse. Details hier.

Das war’s

Oktober 30th, 2011 by Kai

Für alle, die rückwärts lesen: Hier ist der erste Eintrag und die verschiedenen Rundbriefe. Das Passwort für die Bilderposts ist akwaaba. Viel Spaß! Bei Fragen, fragt.

Hier die passende Musik zu den Bildern (kleine Auswahl):

  • 5 5Five – Move Back (Mugye Baya) (BiGxGh.Com)
  • Atumpan – The Thing ft. Stone (Bradez) (Official Video   Lyrics)
  • Away by V.I.P
  • Ruff N Smooth – Azingele (Feat. S.K. Blinckz) (BiGxGh.Com)
  • Ruff n Smooth – Swagger
  • Stay J – Shashee Wowo (BiGxGh.Com)
  • VIP – I think I like am (official video)
  • Zigi – U Sey Wey Tin

Geschützt: Der Abschied aus Ghana

Oktober 30th, 2011 by Kai

Dieser Artikel ist durch ein Passwort geschützt.
Um ihn anzusehen, trage es bitte hier ein:


Geschützt: Swedru

Oktober 30th, 2011 by Kai

Dieser Artikel ist durch ein Passwort geschützt.
Um ihn anzusehen, trage es bitte hier ein:


Geschützt: Maranatha – Strand und Urlaub

Oktober 30th, 2011 by Kai

Dieser Artikel ist durch ein Passwort geschützt.
Um ihn anzusehen, trage es bitte hier ein:


Geschützt: Wli – Wasserfälle und Regenwald

Oktober 30th, 2011 by Kai

Dieser Artikel ist durch ein Passwort geschützt.
Um ihn anzusehen, trage es bitte hier ein:


Rundbrief Nr. 5 – Oktober 2011

Oktober 23rd, 2011 by Kai

Hier der allerletzte Rundbrief. Trotzdem könnt ihr danach noch vier Blogposts erwarten, die ich nachtragen werde.

Rundbrief Nr. 5 Oktober2011