Subversion Repositories seema-scanner

Rev

Rev 20 | Rev 27 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
9 jakw 1
#include "SMCaptureWorker.h"
2
 
3
#include <QCoreApplication>
4
#include <QTime>
5
#include <QSettings>
6
 
7
void SMCaptureWorker::setup(){
8
 
23 jakw 9
    // Create projector
10
    QSettings settings;
11
    int screenNum = settings.value("projector/screenNumber", -1).toInt();
12
    if(screenNum != -1)
13
        projector = new ProjectorOpenGL(screenNum);
14
 
9 jakw 15
    // Create cameras
16
    int iNum0 = settings.value("camera0/interfaceNumber", -1).toInt();
17
    int cNum0 = settings.value("camera0/cameraNumber", -1).toInt();
18
    if(iNum0 != -1)
23 jakw 19
        camera0 = Camera::NewCamera(iNum0,cNum0,triggerModeSoftware);
9 jakw 20
 
21
    int iNum1 = settings.value("camera1/interfaceNumber", -1).toInt();
22
    int cNum1 = settings.value("camera1/cameraNumber", -1).toInt();
23
    if(iNum1 != -1)
23 jakw 24
        camera1 = Camera::NewCamera(iNum1,cNum1,triggerModeSoftware);
9 jakw 25
 
26
    // Set camera settings
27
    CameraSettings cameraSettings;
28
    cameraSettings.shutter = settings.value("camera/shutter", 16.666).toFloat();
29
    cameraSettings.gain = 0.0;
30
 
31
    camera0->setCameraSettings(cameraSettings);
32
    camera1->setCameraSettings(cameraSettings);
33
 
23 jakw 34
    // Start capturing
35
    camera0->startCapture();
36
    camera1->startCapture();
37
 
38
    // Create rotation stage
39
    rotationStage = new RotationStage();
9 jakw 40
}
41
 
42
 
43
void SMCaptureWorker::doWork(){
44
 
23 jakw 45
    projector->displayWhite();
9 jakw 46
 
23 jakw 47
    working = true;
9 jakw 48
 
49
    // Processing loop
23 jakw 50
    QTime time;
51
    time.start();
52
    while(working){
9 jakw 53
 
54
        std::vector<cv::Mat> frameSet;
55
 
56
        CameraFrame frame;
57
 
23 jakw 58
        // trigger cameras
59
        camera0->trigger();
60
        camera1->trigger();
9 jakw 61
 
23 jakw 62
        // retrieve frames
63
        frame = camera0->getFrame();
64
        cv::Mat frameCV;
65
        frameCV  = cv::Mat(frame.height, frame.width, CV_8UC3, frame.memory);
66
        frameCV = frameCV.clone();
67
        frameSet.push_back(frameCV);
9 jakw 68
 
23 jakw 69
        emit newFrame(0, frameCV);
9 jakw 70
 
23 jakw 71
        frame = camera1->getFrame();
72
        frameCV  = cv::Mat(frame.height, frame.width, CV_8UC3, frame.memory);
73
        frameCV = frameCV.clone();
74
        frameSet.push_back(frameCV);
9 jakw 75
 
23 jakw 76
        emit newFrame(1, frameCV);
9 jakw 77
 
23 jakw 78
        //std::cout << "SMCaptureWorker idle " << time.restart() << "ms" << std::endl;
9 jakw 79
 
23 jakw 80
        // Process events e.g. perform a task
9 jakw 81
        QCoreApplication::processEvents();
82
    }
83
 
84
    emit finished();
23 jakw 85
}
9 jakw 86
 
23 jakw 87
void SMCaptureWorker::rotateTo(float angle){
88
 
89
    std::cout << "Moving to: " << angle << std::endl;
90
    rotationStage->moveAbsolute(angle);
91
    rotationStage->wait();
9 jakw 92
}
93
 
23 jakw 94
void SMCaptureWorker::acquireCalibrationSet(float angle){
95
    rotateTo(angle);
96
 
97
    CameraFrame frame;
98
    CalibrationSet calibrationSet;
99
 
100
    // trigger cameras
101
    camera0->trigger();
102
    camera1->trigger();
103
 
104
    // retrieve frames
105
    frame = camera0->getFrame();
106
    cv::Mat frameCV;
107
    frameCV  = cv::Mat(frame.height, frame.width, CV_8UC3, frame.memory);
108
    frameCV = frameCV.clone();
109
 
110
    calibrationSet.frame0 = frameCV;
111
 
112
    frame = camera1->getFrame();
113
    frameCV  = cv::Mat(frame.height, frame.width, CV_8UC3, frame.memory);
114
    frameCV = frameCV.clone();
115
 
116
    calibrationSet.frame1 = frameCV;
117
 
118
    calibrationSet.rotationAngle = angle;
119
 
120
    emit newCalibrationSet(calibrationSet);
9 jakw 121
}
122
 
23 jakw 123
void SMCaptureWorker::acquireCalibrationSets(std::vector<float> angles){}
9 jakw 124
 
23 jakw 125
void SMCaptureWorker::acquireFrameSequence(float angle){}
126
void SMCaptureWorker::acquireFrameSequences(std::vector<float> angles){}
127
 
128
void SMCaptureWorker::abort(){}
129
 
130
void SMCaptureWorker::stopWork(){
131
    working = false;
132
}
133
 
9 jakw 134
SMCaptureWorker::~SMCaptureWorker(){
23 jakw 135
    delete projector;
9 jakw 136
    delete camera0;
137
    delete camera1;
23 jakw 138
    delete rotationStage;
9 jakw 139
}