void Libdc1394SequenceGrabber::idle() { dc1394error_t err; dc1394video_frame_t *last_frame(NULL), *frame(NULL); if (!_camera) { fakeTracking(); return; } do{ err = dc1394_capture_dequeue(_camera, DC1394_CAPTURE_POLICY_POLL, &frame); if (frame) { if (last_frame) err=dc1394_capture_enqueue(_camera, last_frame); last_frame = frame; } } while (frame); checkSuccess(err, "dc1394_capture_dequeue failed"); if (_firstFrame) { setupBayer(); _firstFrame = false; } if (last_frame) { processCameraImageData( last_frame->image ); newFrameAvailable(); err=dc1394_capture_enqueue(_camera, last_frame); checkSuccess(err, "dc1394_capture_enqueue failed"); } }
void CameraWorker::doWork() { if (!cam.isOpened()) return; if (!cam.read(frame)) { qDebug() << "CameraWorker: Cannot read frame"; return; } QByteArray frameData(reinterpret_cast<char*>(frame.data), frame.total() * frame.channels()); emit newFrameAvailable(VideoFrame{frameData, QSize(frame.cols, frame.rows), VideoFrame::BGR}); }