23 #include <core/exception.h>
24 #include <core/exceptions/software.h>
25 #include <core/exceptions/system.h>
26 #include <fvcams/shmem.h>
27 #include <fvutils/system/camargp.h>
28 #include <fvutils/writers/fvraw.h>
35 namespace firevision {
57 SharedMemoryCamera::SharedMemoryCamera(
const char *image_id,
bool deep_copy)
59 image_id_ = strdup(image_id);
60 deep_copy_ = deep_copy;
82 if (cap->
has(
"image_id")) {
83 image_id_ = strdup(cap->
get(
"image_id").c_str());
87 if (cap->
has(
"deep_copy")) {
88 deep_copy_ = (strcasecmp(cap->
get(
"deep_copy").c_str(),
"true") == 0);
101 SharedMemoryCamera::~SharedMemoryCamera()
104 if (deep_buffer_ != NULL) {
108 delete capture_time_;
112 SharedMemoryCamera::init()
115 capture_time_ = NULL;
119 deep_buffer_ = (
unsigned char *)malloc(shm_buffer_->data_size());
126 e.
append(
"Failed to open shared memory image");
133 SharedMemoryCamera::open()
138 SharedMemoryCamera::start()
143 SharedMemoryCamera::stop()
148 SharedMemoryCamera::print_info()
153 SharedMemoryCamera::capture()
156 shm_buffer_->lock_for_read();
157 memcpy(deep_buffer_, shm_buffer_->buffer(), shm_buffer_->data_size());
158 capture_time_->set_time(shm_buffer_->capture_time());
159 shm_buffer_->unlock();
161 capture_time_->set_time(shm_buffer_->capture_time());
165 SharedMemoryCamera::buffer()
170 return shm_buffer_->buffer();
175 SharedMemoryCamera::buffer_size()
177 return colorspace_buffer_size(shm_buffer_->colorspace(),
178 shm_buffer_->width(),
179 shm_buffer_->height());
183 SharedMemoryCamera::close()
188 SharedMemoryCamera::dispose_buffer()
193 SharedMemoryCamera::pixel_width()
195 return shm_buffer_->width();
199 SharedMemoryCamera::pixel_height()
201 return shm_buffer_->height();
205 SharedMemoryCamera::colorspace()
207 return shm_buffer_->colorspace();
211 SharedMemoryCamera::capture_time()
213 return capture_time_;
217 SharedMemoryCamera::flush()
225 SharedMemoryCamera::shared_memory_image_buffer()
231 SharedMemoryCamera::ready()
237 SharedMemoryCamera::set_image_number(
unsigned int n)
246 SharedMemoryCamera::lock_for_read()
255 SharedMemoryCamera::try_lock_for_read()
257 return shm_buffer_->try_lock_for_read();
264 SharedMemoryCamera::lock_for_write()
266 shm_buffer_->lock_for_write();
273 SharedMemoryCamera::try_lock_for_write()
275 return shm_buffer_->try_lock_for_write();
280 SharedMemoryCamera::unlock()
282 shm_buffer_->unlock();
Base class for exceptions in Fawkes.
void append(const char *format,...) noexcept
Append messages to the message list.
Expected parameter is missing.
System ran out of memory and desired operation could not be fulfilled.
void lock_for_read()
Lock shared memory segment for reading.
A class for handling time.
bool has(std::string s) const
Check if an parameter was given.
std::string get(std::string s) const
Get the value of the given parameter.
Shared memory image buffer.
Fawkes library namespace.