23 #include "acquisition_thread.h"
24 #include "aqt_vision_threads.h"
26 #include <core/exceptions/system.h>
27 #include <core/exceptions/software.h>
28 #ifdef FVBASE_TIMETRACKER
29 #include <utils/time/clock.h>
30 #include <utils/time/tracker.h>
32 #include <logging/logger.h>
34 #include <fvcams/shmem.h>
35 #include <fvutils/color/conversions.h>
44 using namespace fawkes;
45 using namespace firevision;
64 :
Thread((std::string(
"FvAcquisitionThread::") + id).c_str())
67 __image_id = strdup(
id);
76 logger->
log_debug(
name(),
"Camera opened, w=%u h=%u c=%s", __width, __height,
77 colorspace_to_string(__colorspace));
82 #ifdef FVBASE_TIMETRACKER
85 __ttc_capture = __tt->add_class(
"Capture");
86 __ttc_lock = __tt->add_class(
"Lock");
87 __ttc_convert = __tt->add_class(
"Convert");
88 __ttc_unlock = __tt->add_class(
"Unlock");
89 __ttc_dispose = __tt->add_class(
"Dispose");
99 for (__shmit = __shm.begin(); __shmit != __shm.end(); ++__shmit) {
100 delete __shmit->second;
146 const char *img_id = NULL;
148 if (cspace == CS_UNKNOWN) {
151 throw Exception(
"Only one vision thread may access the raw camera.");
157 if (__shm.find(cspace) == __shm.end()) {
158 if ( asprintf(&tmp,
"%s.%zu", __image_id, __shm.size()) == -1) {
164 img_id = __shm[cspace]->image_id();
239 __logger->
log_warn(
name(),
"At least one thread was being finalized while prepfin hold "
240 "was about to be acquired");
253 #ifdef FVBASE_TIMETRACKER
255 __tt->ping_start(__ttc_capture);
257 __tt->ping_end(__ttc_capture);
260 for (__shmit = __shm.begin(); __shmit != __shm.end(); ++__shmit) {
261 if (__shmit->first == CS_UNKNOWN)
continue;
262 __tt->ping_start(__ttc_lock);
263 __shmit->second->lock_for_write();
264 __tt->ping_end(__ttc_lock);
265 __tt->ping_start(__ttc_convert);
266 convert(__colorspace, __shmit->first,
267 __camera->
buffer(), __shmit->second->buffer(),
270 __shmit->second->set_capture_time(__camera->
capture_time());
274 __tt->ping_end(__ttc_convert);
275 __tt->ping_start(__ttc_unlock);
276 __shmit->second->unlock();
277 __tt->ping_end(__ttc_unlock);
284 __tt->ping_start(__ttc_dispose);
286 __tt->ping_end(__ttc_dispose);
288 if ( (++__loop_count % FVBASE_TT_PRINT_INT) == 0 ) {
289 __tt->print_to_stdout();
292 #else // no time tracking
296 for (__shmit = __shm.begin(); __shmit != __shm.end(); ++__shmit) {
297 if (__shmit->first == CS_UNKNOWN)
continue;
298 __shmit->second->lock_for_write();
299 convert(__colorspace, __shmit->first,
300 __camera->
buffer(), __shmit->second->buffer(),
303 __shmit->second->set_capture_time(__camera->
capture_time());
307 __shmit->second->unlock();