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> 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();
Fawkes library namespace.
A class for handling time.
void lock_for_read()
Lock shared memory segment for reading.
bool has(std::string s) const
Check if an parameter was given.
Base class for exceptions in Fawkes.
Shared memory image buffer.
std::string get(std::string s) const
Get the value of the given parameter.
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.