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();