Subversion Repositories seema-scanner

Rev

Rev 18 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 18 Rev 205
1
#include "CameraIIDC.h"
1
#include "CameraIIDC.h"
2
#include <cstring>
2
#include <cstring>
3
 
3
 
4
vector<CameraInfo> CameraIIDC::getCameraList(){
4
vector<CameraInfo> CameraIIDC::getCameraList(){
5
    
5
    
6
    dc1394_t *context = dc1394_new();
6
    dc1394_t *context = dc1394_new();
7
    
7
    
8
    dc1394camera_list_t *camera_list;
8
    dc1394camera_list_t *camera_list;
9
    dc1394error_t err;
9
    dc1394error_t err;
10
    err = dc1394_camera_enumerate(context, &camera_list);
10
    err = dc1394_camera_enumerate(context, &camera_list);
11
    DC1394_WRN(err,"libdc1394: Failed to enumerate cameras!");
11
    DC1394_WRN(err,"libdc1394: Failed to enumerate cameras!");
12
 
12
 
13
    vector<CameraInfo> ret;
13
    vector<CameraInfo> ret;
14
    
14
    
15
    for (unsigned int i=0; i<camera_list->num; i++) {
15
    for (unsigned int i=0; i<camera_list->num; i++) {
16
        CameraInfo info;
16
        CameraInfo info;
17
        dc1394camera_t *cam;
17
        dc1394camera_t *cam;
18
        cam = dc1394_camera_new(context, camera_list->ids[i].guid);
18
        cam = dc1394_camera_new(context, camera_list->ids[i].guid);
19
 
19
 
20
        //info.vendor = std::string(cam->vendor ? cam->vendor : "");
20
        //info.vendor = std::string(cam->vendor ? cam->vendor : "");
21
        info.vendor = "IIDC";
21
        info.vendor = "IIDC";
22
        info.model = string(cam->model ? cam->model : "");
22
        info.model = string(cam->model ? cam->model : "");
23
        info.busID = (unsigned int)cam->guid;
23
        info.busID = (unsigned int)cam->guid;
24
        
24
        
25
        dc1394_camera_free(cam);
25
        dc1394_camera_free(cam);
26
        ret.push_back(info);
26
        ret.push_back(info);
27
    }
27
    }
28
    
28
    
29
    dc1394_camera_free_list(camera_list);
29
    dc1394_camera_free_list(camera_list);
30
    dc1394_free(context);
30
    dc1394_free(context);
31
    
31
    
32
    return ret;
32
    return ret;
33
}
33
}
34
 
34
 
35
CameraIIDC::CameraIIDC(unsigned int camNum, CameraTriggerMode triggerMode) : Camera(triggerMode) {
35
CameraIIDC::CameraIIDC(unsigned int camNum, CameraTriggerMode triggerMode) : Camera(triggerMode) {
36
 
36
 
37
    context = dc1394_new();
37
    context = dc1394_new();
38
    
38
    
39
    dc1394camera_list_t *camera_list;
39
    dc1394camera_list_t *camera_list;
40
    dc1394error_t err;
40
    dc1394error_t err;
41
    err = dc1394_camera_enumerate(context, &camera_list);
41
    err = dc1394_camera_enumerate(context, &camera_list);
42
    
42
    
43
    if(camNum+1 > camera_list->num){
43
    if(camNum+1 > camera_list->num){
44
        cerr << "libdc1394: Selected camera is not available!";
44
        cerr << "libdc1394: Selected camera is not available!";
45
        return;
45
        return;
46
    }
46
    }
47
    
47
    
48
    cam = NULL;
48
    cam = NULL;
49
 
49
 
50
    cam = dc1394_camera_new(context, camera_list->ids[camNum].guid);
50
    cam = dc1394_camera_new(context, camera_list->ids[camNum].guid);
51
    if(!cam){
51
    if(!cam){
52
        cerr << "libdc1394: Could not open camera!";
52
        cerr << "libdc1394: Could not open camera!";
53
        return;
53
        return;
54
    }
54
    }
55
 
55
 
56
    dc1394_camera_free_list(camera_list);
56
    dc1394_camera_free_list(camera_list);
57
 
57
 
58
//    // Get video modes
58
//    // Get video modes
59
//    dc1394video_modes_t video_modes;
59
//    dc1394video_modes_t video_modes;
60
//    err=dc1394_video_get_supported_modes(cam, &video_modes);
60
//    err=dc1394_video_get_supported_modes(cam, &video_modes);
61
//    DC1394_WRN(err,"Can't get video modes");
61
//    DC1394_WRN(err,"Can't get video modes");
62
//    // Select highest res mode
62
//    // Select highest res mode
63
//    int i;
63
//    int i;
64
//    dc1394color_coding_t coding;
64
//    dc1394color_coding_t coding;
65
//    for (i=video_modes.num-1;i>=0;i--) {
65
//    for (i=video_modes.num-1;i>=0;i--) {
66
//        if (!dc1394_is_video_mode_scalable(video_modes.modes[i])) {
66
//        if (!dc1394_is_video_mode_scalable(video_modes.modes[i])) {
67
//            dc1394_get_color_coding_from_video_mode(cam, video_modes.modes[i], &coding);
67
//            dc1394_get_color_coding_from_video_mode(cam, video_modes.modes[i], &coding);
68
//            DC1394_WRN(err,"libdc1394: Could not get color coding");
68
//            DC1394_WRN(err,"libdc1394: Could not get color coding");
69
//            if (coding==DC1394_COLOR_CODING_MONO8) {
69
//            if (coding==DC1394_COLOR_CODING_MONO8) {
70
//                video_mode=video_modes.modes[i];
70
//                video_mode=video_modes.modes[i];
71
//                break;
71
//                break;
72
//            }
72
//            }
73
//        }
73
//        }
74
//    }
74
//    }
75
//    if (i < 0) {
75
//    if (i < 0) {
76
//        cerr << "libdc1394: Could not get a valid gray scale mode!";
76
//        cerr << "libdc1394: Could not get a valid gray scale mode!";
77
//        return;
77
//        return;
78
//    }
78
//    }
79
 
79
 
80
    // Select format 7 mode 0
80
    // Select format 7 mode 0
81
    video_mode = DC1394_VIDEO_MODE_FORMAT7_0;
81
    video_mode = DC1394_VIDEO_MODE_FORMAT7_0;
82
 
82
 
83
    // Set bit depth
83
    // Set bit depth
84
    err = dc1394_format7_set_color_coding(cam, video_mode, DC1394_COLOR_CODING_MONO16);
84
    err = dc1394_format7_set_color_coding(cam, video_mode, DC1394_COLOR_CODING_MONO16);
85
    if (err!=DC1394_SUCCESS)
85
    if (err!=DC1394_SUCCESS)
86
        cerr << "libdc1394: Could not set video mode or color coding!";
86
        cerr << "libdc1394: Could not set video mode or color coding!";
87
 
87
 
88
//    // Set video mode
88
//    // Set video mode
89
//    err=dc1394_video_set_mode(cam, video_mode);
89
//    err=dc1394_video_set_mode(cam, video_mode);
90
//    if (err!=DC1394_SUCCESS)
90
//    if (err!=DC1394_SUCCESS)
91
//        cerr << "libdc1394: Could not set video mode!";
91
//        cerr << "libdc1394: Could not set video mode!";
92
 
92
 
93
    // Setup capture
93
    // Setup capture
94
    err=dc1394_video_set_operation_mode(cam, DC1394_OPERATION_MODE_1394B);
94
    err=dc1394_video_set_operation_mode(cam, DC1394_OPERATION_MODE_1394B);
95
    if (err!=DC1394_SUCCESS)
95
    if (err!=DC1394_SUCCESS)
96
        cerr << "libdc1394: Could not set operation mode!";
96
        cerr << "libdc1394: Could not set operation mode!";
97
 
97
 
98
    err=dc1394_video_set_iso_speed(cam, DC1394_ISO_SPEED_800);
98
    err=dc1394_video_set_iso_speed(cam, DC1394_ISO_SPEED_800);
99
    if (err!=DC1394_SUCCESS)
99
    if (err!=DC1394_SUCCESS)
100
        cerr << "libdc1394: Could not set iso speed!";
100
        cerr << "libdc1394: Could not set iso speed!";
101
 
101
 
102
    // Size of ringbuffer (Note: on OS X 10.9, size must be greater than 1)
102
    // Size of ringbuffer (Note: on OS X 10.9, size must be greater than 1)
103
#ifdef __APPLE__
103
#ifdef __APPLE__
104
    unsigned int bufferSize = 2;
104
    unsigned int bufferSize = 2;
105
#else
105
#else
106
    unsigned int bufferSize = 1;
106
    unsigned int bufferSize = 1;
107
#endif
107
#endif
108
 
108
 
109
    err=dc1394_capture_setup(cam, bufferSize, DC1394_CAPTURE_FLAGS_DEFAULT);
109
    err=dc1394_capture_setup(cam, bufferSize, DC1394_CAPTURE_FLAGS_DEFAULT);
110
    if (err!=DC1394_SUCCESS)
110
    if (err!=DC1394_SUCCESS)
111
        cerr << "libdc1394: Could not set up camera!";
111
        cerr << "libdc1394: Could not set up camera!";
112
 
112
 
113
    // Disable auto exposure mode
113
    // Disable auto exposure mode
114
    dc1394_feature_set_power(cam, DC1394_FEATURE_EXPOSURE, DC1394_OFF);
114
    dc1394_feature_set_power(cam, DC1394_FEATURE_EXPOSURE, DC1394_OFF);
115
 
115
 
116
    // Disable gamma mode
116
    // Disable gamma mode
117
    dc1394_feature_set_power(cam, DC1394_FEATURE_GAMMA, DC1394_OFF);
117
    dc1394_feature_set_power(cam, DC1394_FEATURE_GAMMA, DC1394_OFF);
118
 
118
 
119
    // Disable sharpness mode
119
    // Disable sharpness mode
120
    dc1394_feature_set_power(cam, DC1394_FEATURE_SHARPNESS, DC1394_OFF);
120
    dc1394_feature_set_power(cam, DC1394_FEATURE_SHARPNESS, DC1394_OFF);
121
 
121
 
122
    // Disable frame-rate mode
122
    // Disable frame-rate mode
123
    dc1394_feature_set_power(cam, DC1394_FEATURE_FRAME_RATE, DC1394_OFF);
123
    dc1394_feature_set_power(cam, DC1394_FEATURE_FRAME_RATE, DC1394_OFF);
124
 
124
 
125
    // Set manual settings
125
    // Set manual settings
126
    dc1394_feature_set_mode(cam, DC1394_FEATURE_SHUTTER, DC1394_FEATURE_MODE_MANUAL);
126
    dc1394_feature_set_mode(cam, DC1394_FEATURE_SHUTTER, DC1394_FEATURE_MODE_MANUAL);
127
    dc1394_feature_set_mode(cam, DC1394_FEATURE_GAIN, DC1394_FEATURE_MODE_MANUAL);
127
    dc1394_feature_set_mode(cam, DC1394_FEATURE_GAIN, DC1394_FEATURE_MODE_MANUAL);
128
 
128
 
129
 
129
 
130
    // Set reasonable default settings
130
    // Set reasonable default settings
131
    CameraSettings settings;
131
    CameraSettings settings;
132
    //settings.shutter = 8.333;
132
    //settings.shutter = 8.333;
133
    settings.shutter = 16.66;
133
    settings.shutter = 16.66;
134
    settings.gain = 0.0;
134
    settings.gain = 0.0;
135
    this->setCameraSettings(settings);
135
    this->setCameraSettings(settings);
136
 
136
 
137
    // Print camera features and settings
137
    // Print camera features and settings
138
    dc1394featureset_t features;
138
    dc1394featureset_t features;
139
    err=dc1394_feature_get_all(cam, &features);
139
    err=dc1394_feature_get_all(cam, &features);
140
    DC1394_WRN(err, "libdc1394: Could not get feature set.");
140
    DC1394_WRN(err, "libdc1394: Could not get feature set.");
141
    dc1394_feature_print_all(&features, stdout);
141
    dc1394_feature_print_all(&features, stdout);
142
    fflush(stdout);
142
    fflush(stdout);
143
 
143
 
144
    return;
144
    return;
145
}
145
}
146
    
146
    
147
 
147
 
148
unsigned int getSetting(dc1394camera_t *cam, dc1394feature_t setting){
148
unsigned int getSetting(dc1394camera_t *cam, dc1394feature_t setting){
149
    dc1394error_t err;
149
    dc1394error_t err;
150
    unsigned int value;
150
    unsigned int value;
151
    err = dc1394_feature_get_value(cam, setting, &value);
151
    err = dc1394_feature_get_value(cam, setting, &value);
152
    if(err != DC1394_SUCCESS)
152
    if(err != DC1394_SUCCESS)
153
        cerr << "Could not get setting!" << endl;
153
        cerr << "Could not get setting!" << endl;
154
 
154
 
155
    return value;
155
    return value;
156
}
156
}
157
 
157
 
158
CameraSettings CameraIIDC::getCameraSettings(){
158
CameraSettings CameraIIDC::getCameraSettings(){
159
 
159
 
160
    // Get settings:
160
    // Get settings:
161
    CameraSettings settings;
161
    CameraSettings settings;
162
    settings.gain = getSetting(cam, DC1394_FEATURE_GAIN);
162
    settings.gain = getSetting(cam, DC1394_FEATURE_GAIN);
163
    settings.shutter = getSetting(cam, DC1394_FEATURE_SHUTTER);
163
    settings.shutter = getSetting(cam, DC1394_FEATURE_SHUTTER);
164
 
164
 
165
    return settings;
165
    return settings;
166
}
166
}
167
 
167
 
168
void setSetting(dc1394camera_t *cam, dc1394feature_t setting, float value){
168
void setSetting(dc1394camera_t *cam, dc1394feature_t setting, float value){
169
    dc1394error_t err;
169
    dc1394error_t err;
170
    float min, max;
170
    float min, max;
171
    dc1394_feature_get_absolute_boundaries(cam, setting, &min, &max);
171
    dc1394_feature_get_absolute_boundaries(cam, setting, &min, &max);
172
    if(value < min || value > max){
172
    if(value < min || value > max){
173
        std::cerr << "CameraIIDC: cannot set value. Out of permissable range." << std::endl;
173
        std::cerr << "CameraIIDC: cannot set value. Out of permissable range." << std::endl;
174
    } else {
174
    } else {
175
        err = dc1394_feature_set_absolute_control(cam, setting, DC1394_ON);
175
        err = dc1394_feature_set_absolute_control(cam, setting, DC1394_ON);
176
        if(err != DC1394_SUCCESS)
176
        if(err != DC1394_SUCCESS)
177
            cerr << "Could not enable absolute control!" << endl;
177
            cerr << "Could not enable absolute control!" << endl;
178
        err = dc1394_feature_set_absolute_value(cam, setting, value);
178
        err = dc1394_feature_set_absolute_value(cam, setting, value);
179
        if(err != DC1394_SUCCESS)
179
        if(err != DC1394_SUCCESS)
180
            cerr << "Could not set absolute value!" << endl;
180
            cerr << "Could not set absolute value!" << endl;
181
    }
181
    }
182
}
182
}
183
 
183
 
184
void CameraIIDC::setCameraSettings(CameraSettings settings){
184
void CameraIIDC::setCameraSettings(CameraSettings settings){
185
 
185
 
186
    // Set settings:
186
    // Set settings:
187
    setSetting(cam, DC1394_FEATURE_GAIN, settings.gain);
187
    setSetting(cam, DC1394_FEATURE_GAIN, settings.gain);
188
    setSetting(cam, DC1394_FEATURE_SHUTTER, settings.shutter/1000.0); // [ms]
188
    setSetting(cam, DC1394_FEATURE_SHUTTER, settings.shutter/1000.0); // [ms]
189
}
189
}
190
 
190
 
191
 
191
 
192
void CameraIIDC::startCapture(){
192
void CameraIIDC::startCapture(){
193
 
193
 
194
    dc1394error_t err;
194
    dc1394error_t err;
195
 
195
 
196
    // Print camera information
196
    // Print camera information
197
    dc1394_camera_print_info(cam, stdout);
197
    dc1394_camera_print_info(cam, stdout);
198
    fflush(stdout);
198
    fflush(stdout);
199
 
199
 
200
    if(triggerMode == triggerModeHardware){
200
    if(triggerMode == triggerModeHardware){
201
 
201
 
202
        // Set hardware trigger
202
        // Set hardware trigger
203
        err=dc1394_external_trigger_set_power(cam, DC1394_ON);
203
        err=dc1394_external_trigger_set_power(cam, DC1394_ON);
204
        if (err!=DC1394_SUCCESS)
204
        if (err!=DC1394_SUCCESS)
205
            cerr << "libdc1394: Could not set external trigger on!";
205
            cerr << "libdc1394: Could not set external trigger on!";
206
 
206
 
207
        err=dc1394_external_trigger_set_source(cam, DC1394_TRIGGER_SOURCE_0);
207
        err=dc1394_external_trigger_set_source(cam, DC1394_TRIGGER_SOURCE_0);
208
        if (err!=DC1394_SUCCESS)
208
        if (err!=DC1394_SUCCESS)
209
            cerr << "libdc1394: Could not set external trigger source!";
209
            cerr << "libdc1394: Could not set external trigger source!";
210
 
210
 
211
        err=dc1394_external_trigger_set_mode(cam, DC1394_TRIGGER_MODE_14);
211
        err=dc1394_external_trigger_set_mode(cam, DC1394_TRIGGER_MODE_14);
212
        if (err!=DC1394_SUCCESS)
212
        if (err!=DC1394_SUCCESS)
213
            cerr << "libdc1394: Could not set external trigger mode!";
213
            cerr << "libdc1394: Could not set external trigger mode!";
214
 
214
 
215
        err=dc1394_external_trigger_set_polarity(cam, DC1394_TRIGGER_ACTIVE_HIGH);
215
        err=dc1394_external_trigger_set_polarity(cam, DC1394_TRIGGER_ACTIVE_HIGH);
216
        if (err!=DC1394_SUCCESS)
216
        if (err!=DC1394_SUCCESS)
217
            cerr << "libdc1394: Could not set external trigger polarity!";
217
            cerr << "libdc1394: Could not set external trigger polarity!";
218
 
218
 
219
    } else if(triggerMode == triggerModeSoftware) {
219
    } else if(triggerMode == triggerModeSoftware) {
220
 
220
 
221
        // Disable hardware trigger
221
        // Disable hardware trigger
222
        err=dc1394_external_trigger_set_power(cam, DC1394_OFF);
222
        err=dc1394_external_trigger_set_power(cam, DC1394_OFF);
223
        if (err!=DC1394_SUCCESS)
223
        if (err!=DC1394_SUCCESS)
224
            cerr << "libdc1394: Could not set external trigger off!";
224
            cerr << "libdc1394: Could not set external trigger off!";
225
 
225
 
226
    }
226
    }
227
 
227
 
228
    // Begin transmission
228
    // Begin transmission
229
	err = dc1394_video_set_transmission(cam, DC1394_ON);
229
	err = dc1394_video_set_transmission(cam, DC1394_ON);
230
	if (err!=DC1394_SUCCESS)
230
	if (err!=DC1394_SUCCESS)
231
	{
231
	{
232
		cerr << "ERROR: Could not begin transmission!" << endl;
232
		cerr << "ERROR: Could not begin transmission!" << endl;
233
	}    
233
	}    
234
 
234
 
235
    capturing = true;
235
    capturing = true;
236
}
236
}
237
 
237
 
238
void CameraIIDC::stopCapture(){
238
void CameraIIDC::stopCapture(){
239
 
239
 
240
    dc1394error_t err;
240
    dc1394error_t err;
241
 
241
 
242
    err = dc1394_video_set_transmission(cam, DC1394_OFF);
242
    err = dc1394_video_set_transmission(cam, DC1394_OFF);
243
    err = dc1394_capture_stop(cam);
243
    err = dc1394_capture_stop(cam);
244
 
244
 
245
//    // Disable trigger
245
//    // Disable trigger
246
//    err=dc1394_external_trigger_set_power(cam, DC1394_OFF);
246
//    err=dc1394_external_trigger_set_power(cam, DC1394_OFF);
247
//    if (err!=DC1394_SUCCESS)
247
//    if (err!=DC1394_SUCCESS)
248
//        cerr << "libdc1394: Could not set external trigger on!";
248
//        cerr << "libdc1394: Could not set external trigger on!";
249
 
249
 
250
    capturing = false;
250
    capturing = false;
251
}
251
}
252
 
252
 
253
CameraFrame CameraIIDC::getFrame(){
253
CameraFrame CameraIIDC::getFrame(){
254
 
254
 
255
    CameraFrame frame;
255
    CameraFrame frame;
256
 
256
 
257
    if (!capturing) {
257
    if (!capturing) {
258
        cerr << "ERROR: Not capturing on camera. Call startCapture() before lockFrame()." << endl;
258
        cerr << "ERROR: Not capturing on camera. Call startCapture() before lockFrame()." << endl;
259
        return frame;
259
        return frame;
260
    }
260
    }
261
 
261
 
262
    dc1394error_t err;
262
    dc1394error_t err;
263
    
263
    
264
    if(triggerMode == triggerModeSoftware){
264
    if(triggerMode == triggerModeSoftware){
265
 
265
 
266
        if (cam->one_shot_capable != DC1394_TRUE){
266
        if (cam->one_shot_capable != DC1394_TRUE){
267
            cerr << "ERROR: Camera is not one_shot_capable." << endl;
267
            cerr << "ERROR: Camera is not one_shot_capable." << endl;
268
            return frame;
268
            return frame;
269
        }
269
        }
270
 
270
 
271
        dc1394error_t err;
271
        dc1394error_t err;
272
 
272
 
273
        // Flush the ring buffer
273
        // Flush the ring buffer
274
        flushBuffer();
274
        flushBuffer();
275
 
275
 
276
        // One-shot trigger
276
        // One-shot trigger
277
        err == dc1394_video_set_one_shot(cam, DC1394_ON);
277
        err == dc1394_video_set_one_shot(cam, DC1394_ON);
278
 
278
 
279
    }
279
    }
280
 
280
 
281
    // Get frame from ring buffer:
281
    // Get frame from ring buffer:
282
    err = dc1394_capture_dequeue(cam, DC1394_CAPTURE_POLICY_WAIT, &currentFrame);
282
    err = dc1394_capture_dequeue(cam, DC1394_CAPTURE_POLICY_WAIT, &currentFrame);
283
    if (err!=DC1394_SUCCESS){
283
    if (err!=DC1394_SUCCESS){
284
        cerr << "ERROR: Could not capture a frame." << endl;
284
        cerr << "ERROR: Could not capture a frame." << endl;
285
        return frame;
285
        return frame;
286
    }
286
    }
287
 
287
 
288
    // Return the frame to the ring buffer:
288
    // Return the frame to the ring buffer:
289
    dc1394_capture_enqueue(cam, currentFrame);
289
    dc1394_capture_enqueue(cam, currentFrame);
290
    currentFrame = NULL;
290
    currentFrame = NULL;
291
 
291
 
292
    // Copy frame address and properties
292
    // Copy frame address and properties
293
    frame.memory = (unsigned short*)currentFrame->image;
293
    frame.memory = (unsigned short*)currentFrame->image;
294
    frame.width = currentFrame->size[0];
294
    frame.width = currentFrame->size[0];
295
    frame.height = currentFrame->size[1];
295
    frame.height = currentFrame->size[1];
296
    frame.bitDepth = 16;
296
    frame.bitDepth = 16;
297
    frame.sizeBytes = currentFrame->image_bytes;
297
    frame.sizeBytes = currentFrame->image_bytes;
298
 
298
 
299
    return frame;
299
    return frame;
300
}
300
}
301
 
301
 
302
void CameraIIDC::flushBuffer(){
302
void CameraIIDC::flushBuffer(){
303
    // This function is courtesy of ofxVideoGrabber/Libdc1394Grabber
303
    // This function is courtesy of ofxVideoGrabber/Libdc1394Grabber
304
    bool bufferEmpty = false;
304
    bool bufferEmpty = false;
305
 
305
 
306
    while (!bufferEmpty){
306
    while (!bufferEmpty){
307
        if(dc1394_capture_dequeue(cam, DC1394_CAPTURE_POLICY_POLL, &currentFrame) == DC1394_SUCCESS){
307
        if(dc1394_capture_dequeue(cam, DC1394_CAPTURE_POLICY_POLL, &currentFrame) == DC1394_SUCCESS){
308
            if(currentFrame != NULL){
308
            if(currentFrame != NULL){
309
                dc1394_capture_enqueue(cam, currentFrame);
309
                dc1394_capture_enqueue(cam, currentFrame);
310
            } else {
310
            } else {
311
                bufferEmpty = true;
311
                bufferEmpty = true;
312
            }
312
            }
313
        } else {
313
        } else {
314
            bufferEmpty = true;
314
            bufferEmpty = true;
315
        }
315
        }
316
    }
316
    }
317
}
317
}
318
 
318
 
319
 
319
 
320
size_t CameraIIDC::getFrameSizeBytes(){
320
size_t CameraIIDC::getFrameSizeBytes(){
321
    if (!capturing) {
321
    if (!capturing) {
322
        cerr << "ERROR: Cannot get frame size before capturing. Call startCapture() before getFrameSizeBytes()." << endl;
322
        cerr << "ERROR: Cannot get frame size before capturing. Call startCapture() before getFrameSizeBytes()." << endl;
323
        return 0;
323
        return 0;
324
    }
324
    }
325
 
325
 
326
//    dc1394video_frame_t *frame = NULL;
326
//    dc1394video_frame_t *frame = NULL;
327
//    dc1394error_t err;
327
//    dc1394error_t err;
328
    
328
    
329
//	// Get frame from ring buffer:
329
//	// Get frame from ring buffer:
330
//    err = dc1394_capture_dequeue(cam, DC1394_CAPTURE_POLICY_WAIT, &frame);
330
//    err = dc1394_capture_dequeue(cam, DC1394_CAPTURE_POLICY_WAIT, &frame);
331
//    err = dc1394_capture_enqueue(cam, frame);
331
//    err = dc1394_capture_enqueue(cam, frame);
332
    
332
    
333
//    return frame->image_bytes;
333
//    return frame->image_bytes;
334
    uint64_t total_bytes;
334
    uint64_t total_bytes;
335
    dc1394_format7_get_total_bytes(cam, video_mode, &total_bytes);
335
    dc1394_format7_get_total_bytes(cam, video_mode, &total_bytes);
336
 
336
 
337
    return total_bytes;
337
    return total_bytes;
338
}
338
}
339
 
339
 
340
size_t CameraIIDC::getFrameWidth(){
340
size_t CameraIIDC::getFrameWidth(){
341
    uint32_t _width, _height;
341
    uint32_t _width, _height;
342
    dc1394_get_image_size_from_video_mode(cam, video_mode, &_width, &_height);
342
    dc1394_get_image_size_from_video_mode(cam, video_mode, &_width, &_height);
343
    return _width;
343
    return _width;
344
}
344
}
345
 
345
 
346
 
346
 
347
size_t CameraIIDC::getFrameHeight(){
347
size_t CameraIIDC::getFrameHeight(){
348
    uint32_t _width, _height;
348
    uint32_t _width, _height;
349
    dc1394_get_image_size_from_video_mode(cam, video_mode, &_width, &_height);
349
    dc1394_get_image_size_from_video_mode(cam, video_mode, &_width, &_height);
350
    return _height;
350
    return _height;
351
}
351
}
352
 
352
 
353
 
353
 
354
CameraIIDC::~CameraIIDC(){
354
CameraIIDC::~CameraIIDC(){
355
    // Stop camera transmission
355
    // Stop camera transmission
356
    if(capturing)
356
    if(capturing)
357
        stopCapture();
357
        stopCapture();
358
    else
358
    else
359
        dc1394_capture_stop(cam);
359
        dc1394_capture_stop(cam);
360
 
360
 
361
    // Gracefulle destruct the camera
361
    // Gracefulle destruct the camera
362
    dc1394_camera_free(cam);
362
    dc1394_camera_free(cam);
363
    dc1394_free(context);
363
    dc1394_free(context);
364
}
364
}
365
 
365
 
366
 
366
 
367
 
367
 
368
 
368