Posts by e9hack


    Wobei ...
    ... die SD-FF zickt nicht nur bei HD-Aufnahmen rum.
    Bei manchen Sendungen von 3sat ist die Bitrate derart hoch, dass es die FF nimmer verkraftet.
    Dann geht sie in Zeitlupen-Anzeige über mit völlig abstrusen Nebeneffekten (Zeitlupenton, Bildaussetzer, etc).
    Klar, auch in so einem Falle sind die Aufnahmen dann Schrott.


    In der Konstellation ist die FF auch bei mittleren Bitraten überfordert. Da gehen zwei Streams zum PC und einer zurück zur Karte. Dafür ist das Interface zum TMX320AV7111 zu schmalbandig.


    Gruß
    e9hack

    Hi,


    wenn ich PIP beende, sehe ich immer 2..4 Meldungen über freigegebene, aber nicht verwendete Surfaces:

    Code
    1. Jan 7 17:46:18 vdr vdr: (video.c:8120) video: slow down video, duping frame
    2. Jan 7 17:46:18 vdr vdr: (video.c:8125) video: slow down video, duping frame
    3. Jan 7 17:46:18 vdr vdr: (video.c:8171) video: 24:28:51.871 +84 684 240/\ms 23+7 v-buf
    4. Jan 7 17:46:31 vdr vdr: (video.c:5546) video/vdpau: release surface 0x000015, which is not in use
    5. Jan 7 17:46:31 vdr vdr: (video.c:5546) video/vdpau: release surface 0x000016, which is not in use
    6. Jan 7 17:46:31 vdr vdr: (video.c:5546) video/vdpau: release surface 0x000017, which is not in use
    7. Jan 7 17:46:31 vdr vdr: [13641] (thread.c:264) TS buffer on device 1 thread ended (pid=13610, tid=13641)
    8. Jan 7 17:46:31 vdr vdr: [13639] (ringbuffer.c:43) buffer stats: 112236 (2%) used
    9. Jan 7 17:46:31 vdr vdr: [13639] (thread.c:264) receiver on device 1 thread ended (pid=13610, tid=13639)
    10. Jan 7 17:46:36 vdr vdr: [13636] (outputserial.c:650) Aurora: size=5268192, speed=8780 Byte/s


    Gruß
    e9hack

    Zu DVBAPI: Ich verstehe immernoch nicht, warum das nötig ist. Was passiert denn wenn der VDR gegen die Kernel-Header gebaut wird? Es ist doch nicht so, als würde sich stündlich die API ändern. Ich habe das vor einiger Zeit selbst mal getestet und das läuft problemlos.


    Der VDR wird gegen irgendwelche Kernel-Header gebaut, aber nicht gegen die des aktuellen Kernels. Die vom aktuellen Kernel liegen unter:
    /lib/modules/`uname -r`/build/usr/include/linux


    Auf einer Entwickler-Maschine kann man normalerweise mehrere Kernel booten. Da muß man die Kernel-Header frei konfigurieren können oder es müssen die Header vom laufenden Kernel verwendet werden.


    Der vom Compiler vordefinierte Pfad /usr/include/linux ist da einfach falsch.


    Gruß
    e9hack

    e9hack : Tolle Idee. Ich lade dich hiermit herzlich dazu ein, es selbst als Patch umzusetzen. Ich bastle jetzt schon seit Stunden am Makefile rum und das was du machen willst geht schlicht nicht.


    Habe ich doch, mußt nur mal den Thread lesen. Ich habe auch versucht zu beschreiben, was das Build-System/Makefile alles können sollte.


    Gruß
    e9hack

    Hier nochmal ein Patch. Jetzt funktioniert das Installieren von den VDR-eigenen Sprachdateien auch.


    Ich sehe im Moment keine Probleme mehr. Ihr?


    Ich muß DVBDIR setzen. Da das beim compilieren nicht per -I$(DVBDIR) übergeben wird, gibts schon Fehler beim ersten File:

    Code
    1. g++ -g -O3 -Wall -D__user= -D_KERNEL_STRUCT_NAMES= -D__u8=uint8_t -fPIC -Werror=overloaded-virtual -Wno-parentheses -fPIC -c -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -DREMOTE_KBD -DLIRC_DEVICE=\"/var/run/lirc/lircd\" -DVIDEODIR=\"/video\" -DCONFDIR=\"/video\" -DCACHEDIR=\"/video\" -DRESDIR=\"/video\" -DPLUGINDIR=\"/usr/local/lib/vdr\" -DLOCDIR=\"/usr/src/vdr-1.7.35-test4/locale\" -I/usr/include/freetype2 audio.c
    2. In file included from audio.c:12:
    3. dvbdevice.h:18:2: error: #error VDR requires Linux DVB driver API version 5.3 or higher!
    4. make: *** [audio.o] Fehler 1


    Unabhängig davon, halte ich den Schalter für local Build falsch. Ein normales 'make' muß ausreichen, damit das Programm und alle zum laufen des Programms notwendige Dateien innerhalb des Source- bzw. Build-Verzeichnisses abgelegt werden. Teile der Variablen sind fixe Parameter für den VDR, wie z.B. LIBDIR und LOCDIR. Die dürfen sich für einen Build zum Testen (local Build) und einen Build für eine Installation nicht ändern. Genaugenommen muß ein Makefile alles neu bauen, wenn sich eine Konfigurationsdatei ändert.


    Es sollten alle konfigurierbaren Parameter, auch wenn per Default auskommentiert, in der Make.config.template verbleiben (DVBDIR).


    Gruß
    e9hack

    Das Hauptproblem ist das UP3-Makro. Folgende Variante funktioniert für mich. 'make' erzeugt auch alle Files in PLUGINS/lib und locale, unabhängig davon, wohin die Install-Verzeichnisse zeigen.


    Gruß
    e9hack

    Ist es eigentlich normal, daß in einem Makefile keine Manipulation von Konstanten zulässig ist, wenn diese von extern übergeben wurden?


    z.B. steht im Makefile

    Code
    1. CFLAGS += -fPIC
    2. all:
    3. @echo "CFLAGS=$(CFLAGS)"


    Aufgerufen wird mit 'make' oder 'make CFLAGS=-O3', als Resultat erhält man


    CFLAGS=-fPIC


    oder


    CFLAGS=-O3


    Gruß
    e9hack

    Mein Ziel ist es die Möglickeit zu haben (1 u 4 aus anderem Post von heute):


    1.) "make" im VDR Source-Verzeichnis soll zur Folge haben, daß


    - VDR selber compiliert wird
    - alle Plugins in ./PLUGINS/src compiliert werden und ggf. ihre *.mo-Files erzeugen
    - alle *.so-Files der Plugins nach ./PLUGINS/lib kopiert werden (mit APIVERSION)
    - alle *.mo-Files (Plugins und VDR) nach ./locale kopiert werden (an die richtigen Stellen)
    - vdr.pc aus VDR Source-Verzeichnis verwendet wird
    - vdr.pc über cflags und cxxflags auf VDR eigene Include-dateien innerhalb des VDR Source-Verzeichnisses zeigt


    4.) "make install" im VDR Source-Verzeichnis soll zur Folge haben, daß


    - alle Dateien (vdr, *.so mit API-Version, *.mo, ..) die zum Starten des VDR notwendig sind, in vordefinierten Verzeichnissen installiert werden
    - wenn Verzeichnisse für Include bzw. vdr.pc definiert sind, auch Include-Dateien und vdr.pc installiert werden
    (benötigt man nicht, wenn es keine Plugins außerhalb des VDR Source-Verzeichnisses gibt)
    - vdr.pc aus VDR Source-Verzeichnis verwendet wird



    Mit der aktuellen Grundstruktur der Plugin-Makefiles kann das nicht funktionieren. Es werden zwei Install-Ziele bzw. -Optionen benötigt. Einmal nach <VDR-Dir>/PLUGINS/libs bzw. <VDR-Dir>/locale und die ander Variante ist LIBDIR bzw. LOCDIR. Man könnte die Plugin-Makefiles so ändern, daß LIBDIR und LOCDIR nicht aus vdr.pc gelesen werden, wenn sie bereits definiert sind. Aus dem VDR Makefile werden dann für 'make' die Plugin-Makefiles per
    'make -C ./PLUGINS/src/<Plugin-Dir z.B. hello> VDRDIR=<VDR-Dir> LOCDIR=<VDR-Dir>/locale LIBDIR=<VDR-Dir>/PLUGINS/lib install'
    aufgerufen. Für 'make install' werden die Plugin-Makefiles per
    'make -C ./PLUGINS/src/hello VDRDIR=<VDR-Dir> install'
    aufgerufen, ohne die Install-Verzeichnisse zu überschreiben. Diese werden dann aus vdr.pc ausgelesen.


    Das könnte man auch für CFLAGS und CXXFLAGS machen, um die richtigen Include-Pfade zu setzen, wenn INCDIR nicht <VDR-Dir>/include ist.


    Die anderen Varianten aus meinem Post sollten damit auch funktinieren.


    Gruß
    e9hack


    ...baust Du mit den Treibern von Ufo? Dann fehelen da die richtigen includes und die CFLAGS.


    Das paßt schon. Das Problem ist, ich möchte, wenn alles compiliert wurde, auch installieren können. Dazu setze ich INCDIR auf das Installationsverzeichnis, wo die Include-Dateien landen sollen. Das ist beim compilieren noch leer. Es wird aber per -I$(INCDIR) dem Compiler mitgegeben, der findet dann nichts. Irgendwie wird im Makefile ein zusätzliches Verzeichnis dazugebastelt. Da kommt als Parameter dann -I/include raus. Das Verzeichnis gibts aber auch nicht.


    Gruß
    e9hack

    Quote


    Was allerdings reicht ist das hier.


    Code
    1. @echo "cflags=$(CFLAGS) $(CDEFINES)" >> $@
    2. @echo "cxxflags=$(CFLAGS) $(CDEFINES)" >> $@


    Nein reicht nicht, dann kannst Du in einem Plugin-Verzeichnis kein make mehr ausführen.


    Version 3 vom Patch hat ein weiteres Problem, für das dvbhddevice Plugin wird sowohl vdr.pc aus dem VDR-Source-Verzeichnis als auch, wenn vorhanden, /usr/local/lib/pkgconfig/vdr.pc verwendet. Wenn /usr/local/lib/pkgconfig/vdr.pc veraltet oder fehlerhaft ist, wird dvbhddevice nicht gebaut.


    Gruß
    e9hack

    Ich habe das jetzt mal ausprobiert.
    Wenn ich im VDR-Verzeichnis einfach nur "make" mache, dann werden die *.so und *.mo Files der Plugins nicht nach ./PLUGINS/lib bzw. ./locale kopiert. Ich weiß nicht, ob das schon funktionieren soll (hab zumindest keinen Parameter gesehen, mit dem man das aktivieren könnte), drum sag' ich's einfach mal...


    Mit Version 3 vom Patch ging das noch...


    Gruß
    e9hack

    Die von dir beschriebenen Varianten 3 + 6 sind aber die Wichtigen. Diese sind notwendig um Plugins in ihre jeweiligen Pakete einzupacken.


    Die sind erst dann wichtig, wenn VDR und Plugin-Entwickler Ihren Job gemacht haben, also eher unwichtig :D


    Damit 'make install' im VDR Source-Verzeichnis keine Fehler erzeugt, muß INCDIR, LOCDIR und LIBDIR geändert werden. cflags/cxxflags in vdr.pc wird so gebaut:

    Code
    1. @echo "cflags=$(CFLAGS) $(CDEFINES) -I$(INCDIR)" >> $@
    2. @echo "cxxflags=$(CXXFLAGS) $(CDEFINES) -I$(INCDIR)" >> $@


    INCDIR ist während der Entwicklung leer oder zeigt auf eine älter (stabile) Version vom VDR. Es kann also so nicht funktionieren. Es muß zwei vdr.pc geben (oder eine andere saubere Trennung für '-I$(INCDIR)'), damit 1+2 und 3 parallel mit der gleichen Make.config arbeiten kann.


    Gruß
    e9hack

    Ein "make" im VDR Source-Verzeichnis soll, wenn alles "lokal" ist, zur Folge haben, daß


    - VDR selber compiliert wird
    - alle Plugins in ./PLUGINS/src compiliert werden und ggf. ihre *.mo-Files erzeugen
    - alle *.so-Files der Plugins nach ./PLUGINS/lib kopiert werden (mit APIVERSION)
    - alle *.mo-Files (Plugins und VDR) nach ./locale kopiert werden (an die richtigen Stellen)


    Damit soll erreicht werden, daß ein lokaler Build sofort lauffähig ist, ohne irgendwas ins System "installieren" zu müssen.


    Sehe ich genauso, ich würde die Anfordeungen genauer formulieren wollen:


    1.) "make" im VDR Source-Verzeichnis soll zur Folge haben, daß


    - VDR selber compiliert wird
    - alle Plugins in ./PLUGINS/src compiliert werden und ggf. ihre *.mo-Files erzeugen
    - alle *.so-Files der Plugins nach ./PLUGINS/lib kopiert werden (mit APIVERSION)
    - alle *.mo-Files (Plugins und VDR) nach ./locale kopiert werden (an die richtigen Stellen)
    - vdr.pc aus VDR Source-Verzeichnis verwendet wird
    - vdr.pc über cflags und cxxflags auf VDR eigene Include-dateien innerhalb des VDR Source-Verzeichnisses zeigt


    2.) "make" in einem Plugin-Source-Verzeichnis innerhalb des VDR Source-Verzeichnisses soll zur Folge haben, daß


    - wie 1) nur für das Plugin


    3.) "make" in einem Plugin Source-Verzeichnis außerhalb des VDR Source-Verzeichnisses soll zur Folge haben, daß


    - Plugin compiliert und ggf. *.mo erzeugt wird
    - vdr.pc aus Install-Verzeichnis (/usr/local/lib/pkgconfig) verwendet wird
    - vdr.pc über cflags und cxxflags auf VDR eigene Include-dateien im Install-Verzeichnis (/usr/local/include/vdr bzw. /usr/local/include/libsi) zeigt


    4.) "make install" im VDR Source-Verzeichnis soll zur Folge haben, daß


    - alle Dateien (vdr, *.so mit API-Version, *.mo, ..) die zum Starten des VDR notwendig sind, in vordefinierten Verzeichnissen installiert werden
    - wenn Verzeichnisse für Include bzw. vdr.pc definiert sind, auch Include-Dateien und vdr.pc installiert werden
    (benötigt man nicht, wenn es keine Plugins außerhalb des VDR Source-Verzeichnisses gibt)
    - vdr.pc aus VDR Source-Verzeichnis verwendet wird


    5.) "make install" in einem Plugin-Source-Verzeichnis innerhalb des VDR Source-Verzeichnisses soll zur Folge haben, daß


    - so wie 4) oder existiert nicht


    6.) "make install" in einem Plugin Source-Verzeichnis außerhalb des VDR Source-Verzeichnisses soll zur Folge haben, daß


    - Plugin Dateien (*.so mit API-Version, *.mo, ..) die zum Starten des VDR notwendig sind, in vordefinierten Verzeichnissen installiert werden
    - vdr.pc aus Install-Verzeichnis (/usr/local/lib/pkgconfig) verwendet wird


    7.) "make clean", "make clean-plugins", ...



    Varianten 3.) und 6.) erscheinen mir eigentlich nicht sinnvoll, da Plugins immer an eine Variante des Vdr und dessen Konfiguration gebunden sind.


    Wenn man 1+2 und 3 haben will, benötigt man zwei Varianten der vdr.pc, bei denen cflags/cxxflags unterschiedlich sind.


    Gruß
    e9hack

    Das war doch eigentlich schon gefixt? Wieso ist das denn wieder rausgeflogen?


    In vdr-1.7.34-makefile-2.diff passt das, dort wird "install-lib install-i18n" als Target genommen. Und das ist ja AFAIK so gewollt und nicht verhandelbar ;)


    Ich habe mich undeutlich ausgedrückt. Der Übeltäter ist install-lib. Das wird sowohl bei 'make' als auch 'make install' für ein Plugin ausgeführt. Das Installationsverzeichnis ist beides mal gleich und wird über vdr.pc vorgegeben.


    Gruß
    e9hack

    Die Makefiles haben auch noch ein konzeptionelles Problem. Ein 'make' im VDR-Source-Verzeichnis führt zu einem 'make && make install' in den Plugin-Verzeichnissen. Das Install-Verrzeichnis muß dabei innerhalb des VDR-Source-Verzeichnisses liegen. Bei einem Aufruf von 'make install' im VDR-Source-Verzeichnis muß auch 'make install' in den Plugin-Verzeichnissen aufgerufen werden. Das Install-Verzeichnis muß jetzt konfigurierbar sein und muß sich von den vorherigen unterscheiden. Das gilt eigentlich für alle Installations-Verzeichnisse, in denen irgendwas abgelegt wird.


    Gruß
    e9hack


    Imho macht das nichts aus. Ein Plugin findet den VDR, auch wenn VDRDIR leer ist. Habe das drin gelassen, damit man per Make.config noch mehr herumspielen kann. ;)


    Also was genau geht nun beim Paketieren schief? Wie sieht der Aufruf des VDR-Makefile aus?


    Ich rufe einfach erst 'make 1>>build.txt 2>>build.txt' auf und danach 'make install 1>>install.txt 2>>install.txt' auf. Jetzt lasse ich mir für ein Plugin die Variablen für LIBDIR, DESTDIR und VDRDIR ausgeben. Bei 'make install' wird 2x install für das Plugin ausgeführt. Beim erstenmal ist LIBDIR=/usr/src/vdr-1.7.35-test2/PLUGINS/lib und VDRDIR=/usr/src/vdr-1.7.35-test2. Beim zweitenmal sind beide Variablen leer. DSTDIR ist in beiden Fällen leer. Wenn VDRDIR leer ist, wird LIBDIR nicht erzeugt.


    Gruß
    e9hack

    e9hack : Zeig mir mal deine Make.config



    Der Output von 'make' und 'make install' ist in den angehängten Dateien. Ich verwende den nackten vdr 1.7.35 ohne weitere Plugins. Im Makefile ist noch UFO's depenencie fix drin. Der hat aber keinen Einfluß.


    Gruß
    e9hack

    Files

    • install.txt.gz

      (930 Byte, downloaded 66 times, last: )
    • build.txt.gz

      (3.88 kB, downloaded 57 times, last: )


    'make install' funktioniert nicht. Es wird einfach alles nach / kopiert. Ich möchte in Make.config festlegen, wohin installiert wird.


    Gruß
    e9hack