Subversion Repositories seema-scanner

Rev

Rev 20 | Go to most recent revision | Details | 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
 
9
    // Create cameras
10
    QSettings settings;
11
    int iNum0 = settings.value("camera0/interfaceNumber", -1).toInt();
12
    int cNum0 = settings.value("camera0/cameraNumber", -1).toInt();
13
    if(iNum0 != -1)
14
        camera0 = Camera::NewCamera(iNum0,cNum0);
15
 
16
    int iNum1 = settings.value("camera1/interfaceNumber", -1).toInt();
17
    int cNum1 = settings.value("camera1/cameraNumber", -1).toInt();
18
    if(iNum1 != -1)
19
        camera1 = Camera::NewCamera(iNum1,cNum1);
20
 
21
    // Set camera settings
22
    CameraSettings cameraSettings;
23
    cameraSettings.shutter = settings.value("camera/shutter", 16.666).toFloat();
24
    cameraSettings.gain = 0.0;
25
 
26
    camera0->setCameraSettings(cameraSettings);
27
    camera1->setCameraSettings(cameraSettings);
28
 
29
    // Read trigger configuration
30
    QString sTriggerMode = settings.value("trigger/mode", "Hardware").toString();
31
    if(sTriggerMode == "hardware")
32
        triggerMode = triggerModeHardware;
33
    else if(sTriggerMode == "software")
34
        triggerMode = triggerModeSoftware;
35
    else
36
        std::cerr << "SLScanWorker: invalid trigger mode " << sTriggerMode.toStdString() << std::endl;
37
}
38
 
39
 
40
void SMCaptureWorker::doWork(){
41
 
42
    unsigned int k=0;
43
 
44
    QTime time; time.start();
45
 
46
    isWorking = true;
47
 
48
    if(triggerMode == triggerModeHardware){
49
        camera0->startCapture();
50
        camera1->startCapture();
51
    }
52
 
53
    std::vector<Camera*> cameras;
54
    cameras.push_back(camera0);
55
    cameras.push_back(camera1);
56
 
57
    // Processing loop
58
    while(isWorking){
59
 
60
        std::vector<cv::Mat> frameSet;
61
 
62
        CameraFrame frame;
63
 
64
        for(int c=0; c<2; c++){
65
            if(triggerMode == triggerModeHardware)
66
                frame = cameras[c]->lockFrame();
67
            else
68
                frame = cameras[c]->getSingleFrame();
69
            cv::Mat frameCV(frame.height, frame.width, CV_8U, frame.memory);
70
            frameCV = frameCV.clone();
71
            frameSet.push_back(frameCV);
72
        }
73
 
74
        //QTest::qSleep(50);
75
 
76
        // Pass frame sequence to decoder
77
        emit newFrameSet(frameSet);
78
 
79
        // Increase iteration counter
80
        k += 1;
81
 
82
        std::cout << "Capture worker " << time.restart() << "ms" << std::endl;
83
 
84
//        cv::imwrite("frameSet0.png",frameSet[0]);
85
//        cv::imwrite("frameSet1.png",frameSet[1]);
86
 
87
        // Process events e.g. check for exit flag
88
        QCoreApplication::processEvents();
89
 
90
    }
91
 
92
    if(triggerMode == triggerModeHardware){
93
        for(unsigned int i=0; i<cameras.size(); i++){
94
            cameras[i]->stopCapture();
95
        }
96
    }
97
 
98
    // Emit message to e.g. initiate thread break down
99
    emit finished();
100
 
101
}
102
 
103
void SMCaptureWorker::stopWorking(){
104
    isWorking = false;
105
}
106
 
107
 
108
SMCaptureWorker::~SMCaptureWorker(){
109
    delete camera0;
110
    delete camera1;
111
}