コード例 #1
0
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");
	}
}
コード例 #2
0
ファイル: cameraworker.cpp プロジェクト: ACKino/qTox
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});
}