welcher Nutzer des pvr350-Plugins kennt das nicht? man schaltet um, und am oberen Bildrand pixeln Artefakte, weil der buffer nicht vollständig geleert wurde.
Ich habe null Ahnung von Programmieren, aber manchmal findet ja auch ein blindes Huhn ein Korn...
Ich habe einfach mal in der ivtv-ext-api.h alle defines, für die nur hexadezimale Werte angegeben waren, auf die Definitionen analog ivtv.h aus dem 0.4-er Treiber geändert.
Also z.B.
#define IVTV_IOC_S_STOP_DECODE _IOW ('@', 43, struct ivtv_cfg_stop_decode)
statt
#define IVTV_IOC_S_STOP_DECODE 0xFFEE7787
Das Ergebnis: Beim Umschalten wird es jetzt kurz schwarz, und das neue Bild kommt unverpixelt.
Des weiteren habe ich mir folgende Zeilen angesehen und experimentiert:
in writer.c :
void cPvr350Writer::Action()
{
unsigned char *buf;
int length;
int max = 4000;
printf("Writer started pid %d\n",getpid());
while(running) {
if ( (buf = m_RingBuffer->Get(length) ) != NULL ) {
/* Writing a length of 4000 seems to keep ivtv happy */
if ( length >= max) {
length = max;
safe_write(output,buf,length);
m_RingBuffer->Del(length);
} else {
cCondWait::SleepMs(1);
}
} else {
cCondWait::SleepMs(1);
}
}
}
Alles anzeigen
Welche Bedeutung hat die 4000, und was ist, wenn man kleinere Werte nimmt?
ferner in device.c:
/* Create a new ringbuffer for queuing data up into, and create
the writing thread
*/
state = UNSYNCED;
m_RingBuffer = new cRingBuffLinear(3000 * 1024, 0, true);
writer = new cPvr350Writer(m_RingBuffer,fd_out);
wie kriegt man den buffer kleiner? wie wirken die beiden Zahlenwerte zusammen?
aktuell habe ich jetzt die 4000 in writer.c erstmal so gelassen und oben aus 3000 * 1024 einfach 3000 * 512 gemacht.
Zusätzlich habe ich die bufferreserve in zwei Dateien von vdr deaktiviert, das bringt auch eine deutliche Geschwindigkeitsverbesserung beim Umschalten:
http://www.linuxtv.org/piperma…2005-November/006387.html
Ich bin jetzt sehr zufrieden mit dem Umschaltverhalten -auch die DVB-T-Sender der Avermedia schalten schnell und sauber um. Bei den analogen Kanälen muss man mal mit dem Wert WaitAfterTuning in den Plugin-Einstellungen von pvrinput experimentieren. Ganz auf Null setzen ist vielleicht auch nicht gut, da der Tuner beim Frequenzwechsel ja erst noch sauber einrasten soll.
Dominic Morris informiere ich auch noch.
Ein Paket der von mir geänderten pvr350-plugin-sourcen liegt unter http://drseltsam.device.name/v…0-0.0.4pre1-drseltsam.tgz
Für die LinVDR-Gemeinde bzw. die PVR350-only-Nutzer darin habe ich vdr 1.3.37 (passend zu Cody) mit deaktivierter bufferreserve sowie das geänderte pvr350-Plugin durch den Compiler gejagt und als Paket unter http://drseltsam.device.name/vdr/cody-vdr-1.3.37-pvr350.tgz abgelegt. (Installation mit