Entwicklung - Einrichten einer Entwicklungsumgebung
Hier ist noch stark Baustelle. Wer Lust hat darf gerne was schreiben!!
Inhaltsverzeichnis |
Motivation
Jeder der sich vornimmt ein paar Zeilen Code für VDR zu programmieren, sei es ein Plugin oder ein patch, kommt früher oder später nicht um eine richtige Entwicklungsumgebung rum. Es ist viel zu mühsam auf einem Wohnzimmer VDR zu entwicklen. Hier sollen ein paar Tipps gezeigt werden wie man die Entwicklung bequem auf seinem Desktop PC machen kann.
Grundfunktionen des Entwicklungsumgbung
Es gibt mindestens zwei Eigenschaften die eine VDR-Entwicklungsumgebung bieten sollte.
- Bequemes programmieren
- Code im VDR testen
Diese Anleitung soll zeigen wie man eine Entwicklungsumgebung mit KDevelop, VDR und dem Xine-Plugin aufbauen kann.
Einrichten von VDR
Beim Einrichten von VDR ist nicht viel zu beachten. Nur ist es beim Verwenden vom Xine-Plugin nicht nötig die DVB-Treiber zu installieren, da das xine-plugin als Device erkannt wird. Trotzdem müssen die Header der Treiber an der richtigen Stelle liegen.(wie in der Beschreibung zum Treiber beschrieben) Bitte folge dieser Anleitung: VDR Installation
Einrichten von Xine-Plugin
Das Einrichten des Xine-Plugins wurde hier genauer beschrieben: Xine-plugin
Einrichten von Xine-Player
Neben dem Xine-Plugin muss auch noch der Xine Player richtig installiert werden:Xine-plugin
Alternativ kann man hier auch sehr schön den XineVDR Player verwenden.
KDevelop einrichten
Fast alle Distributionen liefern KDevelop mit aus. Daher wird die Installation hier nicht weiter beschieben.
Einen wichtigen Punkt möchte ich hier jedoch kurz beschreiben. Erfahrene Programmierer kennen es natürlich. Unter Projekt->Projekt-Optionen->C++ Besonderheiten->Codekomplementierung, können wir den VDR Code zufügen.
Wenn sie dann also cDevice:: + strg + Space eingeben, dann werden ihnen alle Möglichkeiten der Codekomplementierung angezeigt. Das selbe gilt für Methoden von Objekten oder Elementen von Datenstrukturen.
Neues Plugin erstellen
Das Erstellen eines neuen Plugins ist unter VDR recht einfach. In dem Verzeichniss von VDR gibt es ein Skript mit dem Namen "newplugin". Dieses läßt sich recht einfach mit
- newplugin <name>
aufrufen. Das Skript erstellt im Verzeichniss VDR/PLUGINS/src/ ein neues Plugin. Dieses Plugin gilt es nun mit Leben zu füllen.
Plugin unter KDevelop programmieren
Um jedoch nun das Plugin unter KDevelop programmieren zu können, müssen wir erstmal aus dem Makefile ein KDevelop Projekt erstellen. Dieses kann man unter
- Projekt->Projekt importieren...
In dem Dalog wählt man das Verzeichniss in dem das neu erstelle Plguin liegt. Der Projektname wird richtig übernommen. Wir müssen nur noch den Projekttyp wählen. Ich habe hier immer "Generic C++ Application (Automake based)" genommen. Im vdr haben alle C Dateien die Endung *.c. Da wir C++ Programmieren und alle von KDevelop erzeugten Dateien die Endung .cpp haben, ändern wird dieses auch in *.c
Start Skript
Da man sein zu entwicklendes Plugin auch immer testen will, bietet es sich an dieses per Tastendruck aus KDevelop zu machen. Dazu baut man sich ein Skript das ein "make clean && make all" im Pluginverzeichniss aufruft. Somit wird das Plugin übersetzt und in das lib Verzeichniss kopiert. Alternativ kann man auch "make plugins" aus dem VDR Verzeichniss aufrufen. Dauert aber unnötig länger.
Nun soll das Skript vdr mit allen Parametern starten. Ich habe die Ausgabe auf ein extra Fenster gelegt:
xterm -e "./vdr --log=3.7 -v /video/ '-Pxine -r' -w 60 -Ptest" &
Zum schluss soll noch der Xine-Player gestartet werden:
xine vdr:/tmp/vdr-xine/stream#demux:mpeg_pes
Noch sehr hilftreich ist es wenn man ein
tail -f /var/log/syslog
mit einfügt. Dadurch kann man alle outputs des Plugins (mit dsyslog("Hallo Welt")) direkt sehen.
Das ganze zusammen sieht dann in etwas so aus.
#!/bin/bash #Auf wunsch altest Plugin löschen um Probleme zu vermeiden rm ../../lib/libvdr-myplugin.so.1.3.34 make clean make all #testen ob make erfolgreich war if test "${?}" != 0 then exit; fi cd /path/to/VDR xterm -geometry 150 -e "tail -f /var/log/syslog" & xterm -e "./vdr --log=3.7 -v /path/to/video/ '-Pxine -r' -w 60 -Pfemon -Pgetdsmcc" & xine vdr:/tmp/vdr-xine/stream#demux:mpeg_pes
Dieses schreibe ich mir in eine Datei z.B. startvdr.sh und lege diese im Plugin Verzeichniss ab. In KDevelop trage ich nun dieses Skript unter Projekt->Projekt-Optionen->Laufzeit-Optionen->Hauptprogramm ein. Wenn ich nun in KDevelop auf den Startknopf drücke, wird das Plugin übersetzt und mit vdr gestartet.
Benutzen des Debuggers
Hier habe ich leider noch keine Erfahrungen. Vielleicht kann das ja jemand anderes schreiben.
Zu beachten
Es ist zu beachten das Plugins die in der Entwicklungsumgebung entwickelt werden nicht immer auf anhieb auf einem echten VDR laufen. Oft ist es das Problem das das xine-Plugin keine Begrenzung für das OSD hat. Somit kann man damit recht viel machen. Es ist auch zu beachten, dass beim Entwickeln mit dem xine Plugin die Anzahl der Devices um eins erhöht ist. Das vom Xine-Plugin zugefügte Device(PrimaryDevice) dient jedoch nur zur Ausgabe und bietet nicht die Funktion über dieses Device etwas aufzunehmen. Dieses sollte man im Hinterkopft behalten wenn man versucht einen cReceiver oder cFiler zu schreiben.