höchst mysteriös.
Die Funktion Initialize() wird aufgerufen, denn sie ruft zunächst Probe() aus, was beim ersten Durchgang (Prüfung /dev/video0, ob es eine unterstütze Karte ist) ja erfolgreich klappt (PVR 350 gefunden). Offenbar gibt es dann aber bei der Suche auf /dev/video1 und höher ein Problem, denn die Funktion Initialize() wird nicht verlassen (zusammenfassende Meldung fehlt):
bool cPvrDevice::Initialize(void) {
int found = 0;
for (int i = 0; i < kMaxPvrDevices; i++) {
PvrDevices[i] = NULL;
if (Probe(i)) { // -> das klappt, denn Probe() findet die PVR350
PvrDevices[i] = new cPvrDevice(i); //-> klappt auch ("new cPvrDevice (0)" )
found++;
}
}
if (found) // bis hierhin kommt der Code offenbar nicht
log(1, "cPvrDevice::Initialize(): found %d PVR device%s", found, found > 1 ? "s" : "");
else
log(1, "cPvrDevice::Initialize(): no PVR device found");
return found > 0;
}
Alles anzeigen
Es scheint also bei weiteren Aufrufen von Probe() (= Suche nach weiteren PVR-Karten) zu crashen:
bool cPvrDevice::Probe(int DeviceNumber) {
char device[256];
struct v4l2_capability vcap;
struct v4l2_format vfmt;
int v4l2_fd = 0;
bool found = false;
memset(&vcap, 0, sizeof(vcap));
memset(&vfmt, 0, sizeof(vfmt));
sprintf(device, "/dev/video%d", DeviceNumber);
v4l2_fd = open(device, O_RDONLY);
if (v4l2_fd) {
IOCTL(v4l2_fd, VIDIOC_QUERYCAP, &vcap);
if (!memcmp(vcap.driver, "ivtv",4) ||
!memcmp(vcap.driver, "pvrusb2", 7))
found = true;
if (!memcmp(vcap.driver, "cx88_blackbird", 14)) {
vfmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
if (! IOCTL(v4l2_fd, VIDIOC_G_FMT, &vfmt) &&
(v4l2_fourcc('M','P','E','G') == vfmt.fmt.pix.pixelformat))
found=true;
}
close(v4l2_fd);
if (found) log(3, "cPvrDevice::Probe():found %s", vcap.card);
return found;
}
return false;
}
Alles anzeigen
Ich verstehe bloß nicht warum, denn dieser Code hat noch nie Probleme bereitet. Es gibt einen kleinen Bug (int v4l2_fd wird fälschlicherweise mit 0 initialisiert), aber bisher gab das nie Probleme und mit der anderen PVR350 klappt es ja auch.
Hast Du noch irgendwelche weiteren TV-Karten/Sticks angeschlossen?
Wenn die (vermeintlich defekte) PVR350 im Server mit cat funktioniert hat, dann muss sie auch mit pvrinputlaufen.
Gib mir doch bitte mal von beiden PVR350 (bitte wieder einzeln testen) die Ausgabe von
v4l2-ctl --all -d /device/video0
und wenn Du die gleiche Abfrage für video1 bis video4 auch ncoh machst, dann wissen wir gleich, ob noch mehr devices im System sind. Falls sie sich irgendwo versteckt haben sollten