Analogtv-plugin

Aus VDR Wiki
Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

Beschreibung

Autor: Andreas Kool

Mit diesem Plugin ist es möglich, analoges TV mit VDR zu benutzen. Die Ausgabe erfolgt über das DVB-Ausgabegerät, d.h. das Plugin verhält sich dem VDR gegenüber wie eine Budget-DVB-Karte.

Unterstützt werden analoge TV-Karten (mit und ohne Hardware-MPEG-encoder) und Video-Grabber Karten, es kann also vom analogen TV-Tuner, Videorekorder o.ä. angeschaut und aufgezeichnet werden.

Bilder

Setup

Hardwareanforderungen

  • Man benötigt eine Analog-TV-Karte. Diese Karte muss entweder vom bttv Treiber, dem ivtv Treiber oder dem pvrusb2 Treiber unterstützt werden.
  • Weiterhin ist ein Realtime MPEG-Encoder nötig, entweder in Hardware, s.h. Hauppauge PVR250/350/PVR USB2, oder als Software (s.u.).

Softwareanforderungen

  • Wenn kein Hardware-MPEG-Encoder mit linux-Treiberunterstützung auf der TV-Karte drauf ist, ist ein Software-Encoder nötig. Idealerweise mp1e oder ffmpeg.
  • Bei PVR 250/350 neuesten Treiber von ivtvdriver.org. Beim Laden sicherstellen, dass ivtv vor den dvb Treibern geladen wird oder aber die channels.conf entsprechend angepaßt wird.
  • libdvb
  • Video4Linux2 (v4l2) (entfällt für PVR Karten)
  • ALSA (entfällt für PVR Karten)

Installation

cd $SOURCEDIR
tar xvzf libdvb-<VERSION>.tar.gz
cd libdvb-<VERSION>
make
make install
ldconfig

Plugin ist zu patchen.

--- VDR.org/PLUGINS/src/analogtv-0.9.37/player-analogtv.c	2005-07-07 16:32:50.000000000 +0200
+++ VDR/PLUGINS/src/analogtv-0.9.37/player-analogtv.c	2005-07-07 16:36:30.000000000 +0200
@@ -28,7 +28,6 @@
 #include <sys/soundcard.h>

 #include <transform.h>
-extern void pes_in_ts(p2p *p);
 #undef MIN
 #undef MAX

@@ -828,7 +827,7 @@
                 pes++;
                 spes += r;
 
-                get_pes(buffer, r, &p2t, pes_in_ts); // PES -> TS
+                kpes_to_ts(&p2t, buffer, r);
               }
             }
           }
@@ -937,7 +936,7 @@
       spes += r;

       if (r > 0)
-        get_pes(buffer, r, &p2t, pes_in_ts); // PES -> TS
+        kpes_to_ts(&p2t, buffer, r); // PES -> TS
     }
   }

Der Rest der Installation folgt der README und README.de des Plugins. Hinweis: Für ivtv > 0.1.9 muss VPID=301, APID=300 in der channels.conf verwendet werden.

Ein Grundgerüst für eine analoge channels.conf findet sich hier.

Probleme

  • nur eine TV-Karte möglich.
  • Stottern nach Kanalwechsel, Abhilfe mit vdr-1.3.23-stuttering.patch (VDR >= 1.3.23!)
  • Compilerfehler cpu_accel.c:63: error: can't find a register in class `BREG' while reloading `asm' : Abhilfe: Patch für die cpuid Funktion, damit diese sich mit -fPIC kompilieren läßt:
diff -ru analogtv-0.9.37.orig/cpu_accel.c analogtv-0.9.37/cpu_accel.c
--- analogtv-0.9.37.orig/cpu_accel.c	2005-05-13 23:49:38.000000000 +0200
+++ analogtv-0.9.37/cpu_accel.c	2005-05-13 23:57:49.000000000 +0200
@@ -50,30 +50,44 @@
     int AMD;
     uint32_t caps;
 
+#if !defined(PIC) && !defined(__PIC__)
 #define cpuid(op,eax,ebx,ecx,edx)	\
-    asm ("cpuid"			\
+    __asm__ ("cpuid"			\
 	 : "=a" (eax),			\
 	   "=b" (ebx),			\
 	   "=c" (ecx),			\
 	   "=d" (edx)			\
 	 : "a" (op)			\
 	 : "cc")
+#else   /* PIC version : save ebx */
+#define cpuid(op,eax,ebx,ecx,edx)       \
+    __asm__ ("push %%ebx\n\t"           \
+             "cpuid\n\t"                \
+             "movl %%ebx,%1\n\t"        \
+             "pop %%ebx"                \
+             : "=a" (eax),              \
+               "=r" (ebx),              \
+               "=c" (ecx),              \
+               "=d" (edx)               \
+             : "a" (op)                 \
+             : "cc")
+#endif
 
     
-    asm ("pushfl\n\t"
-	 "pushfl\n\t"
-	 "popl %0\n\t"
-	 "movl %0,%1\n\t"
-	 "xorl $0x200000,%0\n\t"
-	 "pushl %0\n\t"
-	 "popfl\n\t"
-	 "pushfl\n\t"
-	 "popl %0\n\t"
-	 "popfl"
-         : "=a" (eax),
-	   "=b" (ebx)
-	 :
-	 : "cc");
+   __asm__ ("pushf\n\t"
+             "pushf\n\t"
+             "pop %0\n\t"
+             "movl %0,%1\n\t"
+             "xorl $0x200000,%0\n\t"
+             "push %0\n\t"
+             "popf\n\t"
+             "pushf\n\t"
+             "pop %0\n\t"
+             "popf"
+             : "=r" (eax),
+               "=r" (ebx)
+             :
+             : "cc");
 
     if (eax == ebx)		/* no cpuid */
       return 0; 

CVS

cvs -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/vdr-analogtv login
cvs -z3 -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/vdr-analogtv co analogtv

Links

[1] http://www.akool.homepage.t-online.de/index.html Homepage des Plugins
[2] http://sourceforge.net/projects/vdr-analogtv Projektseite auf Sourceforge
[3] http://www.ivtvdriver.org/index.php/Main_Page neue IVTV Treiber
[4] http://www.metzlerbros.org/dvb/index.html Libdvb
[5] Kanalliste Pal Zuordnung Kanal-Frequenz
[6] http://ivtv.writeme.ch IVTV Wiki
[7] channels.conf analog Grundgerüst analoge channels.conf