Analogtv-plugin

Aus VDR Wiki
(Unterschied zwischen Versionen)
Wechseln zu: Navigation, Suche
(Installation)
(Installation)
Zeile 28: Zeile 28:
 
make install
 
make install
 
ldconfig
 
ldconfig
 +
</pre>
 +
 +
Plugin ist zu patchen.
 +
 +
<pre>
 +
--- 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
 +
    }
 +
  }
 
</pre>
 
</pre>
  

Version vom 30. August 2005, 17:50 Uhr

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 chris kennedy. Dieser muss nicht mehr gepatched werden. Beim Laden sicherstellen, dass ivtv vor den dvb Treibern geladen wird oder aber die channels.conf entsprechend angepaßt wird. Letzter Stand auf Mailing Liste.
  • libdvb
  • Video4Linux V2 (v4l2)
  • ALSA (nur für Softencoder, nicht 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

  • Stottern nach Kanalwechsel im Transfermode zu einer DVB-Karte

Abhilfe mit vdr-1.3.23-stuttering.patch (Bedingung: VDR>=1.3.23!), siehe cvs des analogTV.

  • Compilerfehler cpu_accel.c:63: error: can't find a register in class `BREG' while reloading `asm'

Es hilft folgender 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://ivtv.no-ip.info/ 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