pvAPI не создает целое изображение с помощью prosilica ge и несколькими потоками
В настоящее время я заново (программирую) драйвер pvapi для OpenCV, и мне не удается добиться потоковой передачи нескольких камер. Когда я использую одну камеру, все работает нормально и плавно, даже при максимальном разрешении, но когда я использую обе камеры, она даже не работает с разрешением 640x480 (максимальное разрешение 1600x1200, и оно отлично работает в моей сетевой конфигурации, поэтому 2 раза 640x480 Это может вызвать проблемы с пропускной способностью. Я проверил это в программе просмотра сэмплов, и она работает.)
Когда я использую более одной камеры, она обновляет только небольшую часть изображения и перестает ждать завершения изображения.
Обе камеры установлены на Bgr24 и ROI 640x480 в середине изображения, PacketSize установлен на 4096, а все остальное по умолчанию. Они подключаются через коммутатор Gigabit Ethernet, который также подключен к ПК со скоростью Gigabit. Программа просто запрашивает изображения и выводит их на экран. Я пытался поточить. Это помогает с задержкой между двумя потоками, но не решает проблему.
Что я делаю не так?
Я использую этот код для получения нового кадра:
int LastIndex = Index - 1;
if(LastIndex == -1) LastIndex = FRAMESCOUNT - 1;
while((Errcode = PvCaptureWaitForFrameDone(Camera.Handle,&(Camera.Frame[Index]), 2000)) != ePvErrSuccess)
printf("\nCam[%ul]: Waiting for frame to return to host... %u\n", Camera.UID, Errcode);
// if frame hasn't been cancelled, requeue frame
if(Camera.Frame[Index].Status != ePvErrCancelled)
{
//Check for gaps in FrameCount due to image returning from camera with no frame queued.
//This should never happen, as we use a multiple frame circular buffer.
if(Last + 1 != Camera.Frame[Index].FrameCount)
{
printf("missing frame");
}
Last = Camera.Frame[Index].FrameCount;
frame->imageData = (char*) Camera.Frame[Index].ImageBuffer;
//Requeue [Index] frame of FRAMESCOUNT num frames
if ((Errcode = PvCaptureQueueFrame(Camera.Handle,&(Camera.Frame[LastIndex]),NULL)) != ePvErrSuccess)
{
printf("Cam[%ul]: PvCaptureQueueFrame err %u\n", Camera.UID, Errcode);
}
//Increment [Index]
Index++;
if(Index==FRAMESCOUNT)
Index = 0;
return true;
}
else
{
return false;
}