Posts by mini73

    Moin!


    ivtv-fb ist (soweit ich weiß) der Framebuffer-Treiber für den TV-Out einer PVR350. Das brauchst du also nicht bzw. kannst du gar nicht benutzen, weil die PVR150 keinen Ausgang hat.


    mini.

    Moin!


    Bei mir ruckelt's auch auf manchen Kanälen (Blockartefakte und Aussetzer im Ton). Die Aufnahmen sind in Ordnung, aber beim Abspielen gibt's Probleme.
    Folgendes finde ich dann im log:


    Audioausgabe ist auf digital eingestellt.


    Werden die Aufnahmen einmal durch ProjectX gejagt, kann ich das resultierende mpg problemlos mit mplayer über die dxr3 abspielen.


    mini.

    Moin!


    Da ich momentan nur eine analoge TV-Karte in meinem VDR hab, komm ich um tvmovie2vdr gar nicht herum...
    DVB-T bietet hier nur öffentlich-rechtliche Sender, DVB-S ist wegen fehlender Möglichkeit eines Schüsselanbaus nicht möglich, DVB-C kostet extra. Und die Daten von tvmovie2vdr sind wesentlich umfangreicher, als das, was ich sonst hier bekomme.
    Ich mag's nicht missen! ;-)


    mini.

    Prima!


    Ich versuche in der Zwischenzeit mal, mir mittels debootstrap eine Woody-Umgebung unter meinem kubuntu 6.06.1 zu erstellen. Auf linvdr.org gibt's ja eine kleine Anleitung, ich denke, damit komme ich zurecht.

    Jo, momentan benutze ich noch den vdr 1.3.24. Ich hoffe, dass ich demnächst mal Zeit finde, eine 1.4er Version einzuspielen, vielleicht ja im Zuge unserer Aktion hier mit dem Plugin. Was wäre denn dabei zu beachten? Momentan benutze ich nur die Plugins dxr3, mp3 und pvrinput.


    Ein Kernel von dir wäre prima, da sind dann bestimmt auch die dxr3-Module vernünftig drin, die brauch ich ja auch...

    Dr. Seltsam
    Nur die PVR150 in meinem VDR. Vielleicht finde ich heute Zeit, da einen neuen Kernel einzuspielen. Momentan muss ich nicht so viele Sachen aufnehmen, da kann er mal einen Tag ausfallen.
    Sollte ich eine bestimmte gcc-Version benutzen und muss ich sonst noch was beachten (glibc o.ä.)?


    wirbel
    So hab ich deinen Code auch interpretiert. Ich kenn mich mit den Innereien von Transport- und Programm-Stream nicht so richtig aus, aber wäre es vielleicht ein Idee, ein korrektes TS-Paket mit schwarzem Bild und ohne Ton an den VDR weiterzureichen, solange der Lesethread im Pause-Modus ist? ivtv kriegt ja von der Pause nichts mit, weil die Daten einfach weiter ausgelesen werden, und der VDR würde dann auch nichts merken. Oder stört es den VDR nicht, wenn er keine Daten mehr kriegt?

    Moin!


    Wenn in SetChannelDevice ein Fehler passiert, z.B. bei SetVideoNorm usw., bleibt der Lesethread im Pause-Modus. Ist das Absicht oder sollte der Thread wieder das Signal zum Weiterlaufen bekommen?
    Vermutlich ist es aber besser, wenn er nicht weiter versucht, Daten zu dekodieren, dass könnte ja sonst was für Müll sein, wenn der Kanal nur halb umgeschaltet wird. Er holt ja trotzdem weiter Daten vom Treiber, so dass es dem ja egal ist, was damit passiert.


    Ich versuch mal, meinen VDR mit einem neuen Kernel zu versorgen, damit ich das Plugin auch mal testen kann.


    mini.

    zu videodev2.h:


    Das Makefile im Plugin-Verzeichnis liest die Make.config aus dem VDR-Verzeichnis. Wenn man da also DVBDIR auf den richtigen Wert setzt, wird die richtige Datei eingebunden. Also kann es (meiner Meinung nach) problemlos aus dem Plugin-Verzeichnis wegfallen.


    mini
    Nachtrag:
    In der Make.config sollte man absolute Pfade angeben, sonst taugt das nicht... Das Beispiel "../DVB" leitet da einen in die Irre. Denn vom Plugin-Verzeichnis aus sieht die Welt ja anders aus.

    Moin!


    Prima, ich werde mir das Paket mal am Wochenende zu Gemüte führen. Mittlerweile hab ich auf meinem Desktop-Rechner ein ubuntu mit Kernel 2.6.18 und aktuellen v4l+ivtv-Sourcen. Ich hab hier zwar keine PVR drin, aber kompilieren geht zumindest...


    Ich denke auch, dass in dem Plugin-Verzeichnis keine videodev2.h stehen sollte. In der Make.config vom vdr kann man ja ein anderes Includeverzeichnis für die DVB-Treiber angeben. Ich weiß jetzt nur nicht, ob das auch an die Plugins weitergereicht wird. Falls nicht, wäre das vielleicht eine Alternative.


    Ich werde mich am Sonntag wieder melden, jetzt ist bei mir erst mal Feierabend... :-)


    mini.

    Ich versteh auch nicht alles, da sind wir dann schon zu zweit. :-) Ich hätte mal Lust, in deinen Code reinzusehen, sag bescheid, wenn du ihn veröffentlichen willst.


    Der tsBuffer wird ja vom Lesethread gefüllt, dort werden die Zugriffe auch durch die Mutex geschützt, ebenso in cPvrDevice::SetChannelDevice. Deshalb finde ich, sollten zumindest um die tsBuffer->Del-Aufrufe ein Lock, eventuell am Anfang der Methode einfach ein "cMutexLock mutexLock(mutex);". Vielleicht baust du das einfach mal ein und schaust, ob anschließend noch alles läuft... :-)

    Hast du in SetCodec auch schon entsprechende Aufrufe mit VIDIOC_G_MPEGCOMP/VIDIOC_S_MPEGCOMP eingesetzt? Da ist ja auch noch ivtv-Kram drin.


    Meiner Meinung nach müssten die tsBuffer-Aufrufe in cPvrDevice::GetTSPacket noch mit mutex.Lock();/mutex.Unlock(); eingeschlossen werden.

    Quote

    Originally posted by wirbel
    Hässlicher ist schon, dass original Brightness, Contrast, Saturation, Hue, Audio Volume mit Werten aus dem ivtv hardcodiert sind.


    Die müsste man sich wohl so holen, in cPvrDevice::cPvrDevice zwischen dem Öffnen des Devices und dem Aufruf der SetXXX-Methoden (SetVideoNorm usw.). Ich hab aber leider noch keinen Compiler, um das mal zu testen.



    bzw. mit


    Quote

    Originally posted by wirbel
    Du kämpfst also (scheinbar) mit nem andrn Effekt. ... Erst ein Reboot des Rechners hilft.


    Sieht so aus. Ich lass meinen VDR deshalb immer morgens einmal neu booten, um sicher zu sein, dass ivtv den Tag über läuft. Dadurch tritt das Problem nicht so häufig auf und ich muss mich nicht über missratene Aufnahmen ärgern.


    Mir ist noch ein Unterschied zwischen ivtv-tune und cPvrDevice::Tune aufgefallen. In pvrinput wird noch 0,5 addiert, um das Ergebnis der Division anders zu runden. ivtv-tune arbeitet einfach nur mit (freq * 16)/1000. Nachdem ich mir mal die Frequenztabellen angesehen habe, gibt es nur ein 9 Ausnahmen bei NTSC US IRC, bei denen die Frequenzen kein Vielfaches von 250 sind. Damit ist die Rundung eigentlich hinfällig, da (freq * 16) immer Vielfache von 1000 liefert (wenn wir schon mal beim Code-Review sind...).

    D.h. durch das Pausieren des Lesethreads beim Umschalten kannst du ein aufgetretenes Flackern beseitigen?


    Zusätzlich kommt bei mir das Flackern nicht nur beim Umschalten (ehrlich gesagt ist es dabei bei mir noch nie aufgetreten), sondern manchmal einfach mal so zwischendurch. Und da ich ein noch etwas ältere ivtv-Version am Laufen habe, kann ich es durch ein Umschalten beheben. Das hilft zwar nicht während einer Aufnahme, aber vor einer Aufnahme kann ich durch einen kurzen Timer auf einem anderen Kanal dafür sorgen, dass die eigentliche Aufnahme vernünftig startet.

    Das könnte sein, vermutlich indem man eine entsprechende Start-Methode implementiert, die dann aufgerufen wird. Ist vermutlich auch nicht so wichtig, da kein anderes Plugin auf pvrinput zugreift, oder? Ist letztendlich auch nur eine Fleißübung, die kann auf später verschoben werden.


    Andere Sache:
    Vielleicht könnte man das Anhalten des Lesethreads von dir und das ReInit von Dr. Seltsam kombinieren, indem man in SetChannelDevice (das ist doch die Methode, die vom PVR beim Tunen aufgerufen wird, richtig?) den Lesethread anhält, tunt, anschließend einen ReInit ausführt (das würde ich logischer finde als vor dem Frequenzwechsel) und dann den Thread weiterlaufen lässt?
    Falls der ReInit zu lange braucht, könnte vielleicht auch ein SetCodec und SetInput reichen. Mir ist allerdings noch nicht ganz klar, was diese Methoden bei ivtv auslösen, den ivtv-Source hab ich mir noch nicht angetan.


    mini.

    Moin!


    Schon klar, aber in der Plugin-Doku unter "Devices/Initializing new devices" steht:


    Quote


    A derived cDevice class shall implement a static function in which it determines whether the necessary hardware to run this sort of device is actually present in this machine (or whatever other prerequisites might be important), and then creates as many device objects as necessary. See VDR/dvbdevice.c for the implementation of the cDvbDevice initialize function.


    A plugin that adds devices to a VDR instance shall call this function from its Initialize() function to make sure other plugins that may need to have access to all available devices will see them in their Start() function.


    cPvrDevice::Initialize erstellt die cPvrDevice-Objekte. Laut Doku sollte die also in cPluginPvrInput::Initialize aufgerufen werden und nicht in cPluginPvrInput::Start. Das meinte ich.


    mini.

    Moin!


    Ich bin gerade dabei, mich mit dem Source von pvrinput vertraut zu machen. Dabei ist mir nur eine kleine Unstimmigkeit zu der VDR-Plugin-Doku aufgefallen, die wahrscheinlich überhaupt nichts mit dem Flackern zu tun hat.


    In der Doku steht, dass alle Devices in der Initialize()-Methode instantiiert werden sollen, damit andere Plugins während der Start()-Runde darauf zugreifen können. Pvrinput ruft cPvrDevice::Initialize(); allerdings in Start() auf.
    Da ich noch keinen VDR mit aktuellem Kernel habe (mittwochs ist mein Bastelabend, sonst hab ich keine Zeit, und ich muss mir erst mal eine Entwicklungsumgebung bauen), könnte mal jemand ausprobieren, ob es einen negativen Effekt hat, wenn man den Aufruf nach Initialize() verschiebt?
    Oder hat das schon mal jemand ausprobiert?


    mini.

    Moin!


    Ich kann zwar programmieren (zumindest verdiene ich mein Geld damit), hab allerdings noch nie in ein vdr-Plugin bzw. in Linux-Kernel-Module reingeschaut. Und da ich selbst eine PVR150 habe, hab ich Interesse daran, dass es mit dem Ding weitergeht, weil ich zu den Leuten gehöre, die das Flackerproblem haben.


    Wenn mir jemand verrät, wo ich aktuelle Sourcen zum pvrinput bekomme, werde ich mal versuchen, mich in die Materie einzuarbeiten.


    Was sollte ich noch lesen, um ein vdr-plugin zu verstehen? Was für eine Distribution sollte ich als Entwicklungsumgebung benutzen? Ich hab kein Problem mit vi und Kommandozeile...


    mini.