我有4台Point Grey Chameleon相机连接到我的笔记本电脑和Ubuntu 14.04。 Point Grey SDK 2.7和2.8。 我写了简单的程序:
#include <iostream>
#include <vector>
#include "Camera.h"
#include "FlyCapture2Defs.h"
#include "FlyCapture2.h"
#include "FlyCapture2GUI.h"
#include <unistd.h>
using namespace FlyCapture2;
bool GetCameras( PGRGuid* pGuids, unsigned int* pSize )
{
bool ok;
CameraSelectionDlg camSlnDlg;
camSlnDlg.ShowModal( &ok, pGuids, pSize );
return ok;
}
int main(int /*argc*/, char** /*argv*/)
{
BusManager bus;
PGRGuid guid[64];
unsigned int size = 64;
bool ok = GetCameras( &guid[0], &size );
if ( ok != true || size <= 0 )
return -1;
for ( unsigned int i = 0; i < size; i++ )
{
Error error;
Camera* cam = new Camera();
unsigned int serial=0;
bus.GetCameraSerialNumberFromIndex(i, &serial);
std::cerr << "Connecting cam " << i << " serial=" << serial << std::endl;
error = cam->Connect( &guid[i] );
std::cerr <<" ... and starting capture: start..." << std::endl;
error = cam->StartCapture();
std::cerr << "Cam " << i << " started ok "<< std::endl;
}
std::cerr <<"All cams started OK! "<< std::endl;
return 0;
}
我运行FlyCap2应用程序,并将所有摄像机的VideoSettings设置为640 * 480,7 fps。 然后我运行这个程序,一切正常。
之后,我将VideoFormat更改为任何其他(1920 * 940,或更改数据包大小),此程序在最后一次调用StartCapture()时挂起。
它不依赖于连接的摄像机数量:如果连接2台摄像机,它将在第二次调用StartCapture()时挂起。
这是典型的gdb回溯:
(gdb) bt
#0 0xb64df5f4 in __libc_do_syscall () from /lib/arm-linux-gnueabihf/libpthread.so.0
#1 0xb64db1d8 in pthread_cond_wait@@GLIBC_2.4 () from /lib/arm-linux-gnueabihf/libpthread.so.0
#2 0xb6bfb6e0 in ?? () from /opt/flycam/lib/libflycapture.so.2
#3 0xb6c0abbe in ?? () from /opt/flycam/lib/libflycapture.so.2
#4 0xb6c38124 in ?? () from /opt/flycam/lib/libflycapture.so.2
#5 0xb6bf1b18 in FlyCapture2::Camera::StartCapture(void (*)(FlyCapture2::Image*, void const*), void const*) () from /opt/flycam/lib/libflycapture.so.2
#6 0x0002fcfa in FlycapWindow::Start(FlyCapture2::PGRGuid) ()
#7 0x00030dfc in FlycapWindow::Run(FlyCapture2::PGRGuid) ()
#8 0x0002c9ce in main ()
(gdb)
在回调模式下调用StartCapture不会改变任何内容。
Windows版本的Point Grey SDK工作正常。
你能帮我解决这个问题吗?
答案 0 :(得分:0)
你能搞清楚吗?我猜它是由于&#34; USBFS缓冲区大小太小(默认为16 MB)。以下命令可用于检查usbfs_memory_mb大小。&#34;正如Streaming Point Grey Cameras on Embedded Systems应用说明中所述。我还没有尝试过,所以如果你有的话,我很好奇。
更新:我碰巧在Odroid XU4上运行Ubuntu 14.04,所以更新usbfs_memory_mb就像编辑/media/boot/boot.ini一样简单,并在最后添加usbcore.usbfs_memory_mb=1000
到bootargs
。现在我能够以全分辨率捕捉。我希望这也适合你。