23 #include <core/exception.h>
24 #include <core/exceptions/system.h>
25 #include <core/exceptions/software.h>
26 #include <fvcams/shmem.h>
27 #include <fvutils/writers/fvraw.h>
28 #include <fvutils/system/camargp.h>
33 using namespace fawkes;
35 namespace firevision {
60 SharedMemoryCamera::SharedMemoryCamera(
const char *image_id,
bool deep_copy)
62 __image_id = strdup(image_id);
63 __deep_copy = deep_copy;
86 if ( cap->
has(
"image_id") ) {
87 __image_id = strdup(cap->
get(
"image_id").c_str());
91 if ( cap->
has(
"deep_copy") ) {
92 __deep_copy = (strcasecmp(cap->
get(
"deep_copy").c_str(),
"true") == 0);
106 SharedMemoryCamera::~SharedMemoryCamera()
109 if ( __deep_buffer != NULL ) {
110 free( __deep_buffer );
113 delete __capture_time;
118 SharedMemoryCamera::init()
120 __deep_buffer = NULL;
121 __capture_time = NULL;
125 __deep_buffer = (
unsigned char *)malloc(__shm_buffer->data_size());
126 if ( ! __deep_buffer ) {
132 e.
append(
"Failed to open shared memory image");
139 SharedMemoryCamera::open()
145 SharedMemoryCamera::start()
150 SharedMemoryCamera::stop()
155 SharedMemoryCamera::print_info()
160 SharedMemoryCamera::capture()
163 __shm_buffer->lock_for_read();
164 memcpy(__deep_buffer, __shm_buffer->buffer(), __shm_buffer->data_size());
165 __capture_time->set_time(__shm_buffer->capture_time());
166 __shm_buffer->unlock();
168 else __capture_time->set_time(__shm_buffer->capture_time());
172 SharedMemoryCamera::buffer()
175 return __deep_buffer;
177 return __shm_buffer->buffer();
182 SharedMemoryCamera::buffer_size()
184 return colorspace_buffer_size(__shm_buffer->colorspace(),
185 __shm_buffer->width(),
186 __shm_buffer->height() );
190 SharedMemoryCamera::close()
195 SharedMemoryCamera::dispose_buffer()
200 SharedMemoryCamera::pixel_width()
202 return __shm_buffer->width();
206 SharedMemoryCamera::pixel_height()
208 return __shm_buffer->height();
213 SharedMemoryCamera::colorspace()
215 return __shm_buffer->colorspace();
220 SharedMemoryCamera::capture_time()
222 return __capture_time;
227 SharedMemoryCamera::flush()
236 SharedMemoryCamera::shared_memory_image_buffer()
243 SharedMemoryCamera::ready()
250 SharedMemoryCamera::set_image_number(
unsigned int n)
260 SharedMemoryCamera::lock_for_read()
270 SharedMemoryCamera::try_lock_for_read()
272 return __shm_buffer->try_lock_for_read();
280 SharedMemoryCamera::lock_for_write()
282 __shm_buffer->lock_for_write();
290 SharedMemoryCamera::try_lock_for_write()
292 return __shm_buffer->try_lock_for_write();
298 SharedMemoryCamera::unlock()
300 __shm_buffer->unlock();
std::string get(std::string s) const
Get the value of the given parameter.
A class for handling time.
void lock_for_read()
Lock shared memory segment for reading.
Base class for exceptions in Fawkes.
Shared memory image buffer.
Expected parameter is missing.
System ran out of memory and desired operation could not be fulfilled.
void append(const char *format,...)
Append messages to the message list.
bool has(std::string s) const
Check if an parameter was given.