24 #include <fvutils/net/fuse_image_content.h> 25 #include <fvutils/ipc/shm_image.h> 26 #include <fvutils/color/conversions.h> 27 #include <fvutils/compression/jpeg_decompressor.h> 29 #include <core/exceptions/system.h> 30 #include <core/exceptions/software.h> 33 #include <netinet/in.h> 53 FuseImageContent::FuseImageContent(uint32_t type,
54 void *payload,
size_t payload_size)
56 if ( type != FUSE_MT_IMAGE ) {
60 _payload_size = payload_size;
65 __capture_time =
new fawkes::Time(ntohl(__header->capture_time_sec),
66 ntohl(__header->capture_time_usec));
68 __buffer_size = ntohl(__header->buffer_size);
80 _payload = malloc(_payload_size);
82 if ( _payload == NULL ) {
89 strncpy(__header->image_id, b->
image_id(), IMAGE_ID_MAX_LENGTH);
90 __header->format = FUSE_IF_RAW;
92 __header->reserved = 0;
93 __header->width = htonl(b->
width());
94 __header->height = htonl(b->
height());
95 __header->buffer_size = htonl(__buffer_size);
97 long int cts = 0, ctus = 0;
99 __header->capture_time_sec = htonl(cts);
100 __header->capture_time_usec = htonl(ctus);
102 __capture_time = NULL;
105 memcpy(__buffer, b->
buffer(), __buffer_size);
122 FuseImageContent::FuseImageContent(FUSE_image_format_t image_format,
const char *image_id,
123 unsigned char *buffer,
size_t buffer_size,
124 colorspace_t colorspace,
125 unsigned int width,
unsigned int height,
126 long int capture_time_sec,
127 long int capture_time_usec)
129 __buffer_size = buffer_size;
131 _payload = malloc(_payload_size);
133 if ( _payload == NULL ) {
140 strncpy(__header->image_id, image_id, IMAGE_ID_MAX_LENGTH);
141 __header->format = image_format;
142 __header->colorspace = htons(colorspace);
143 __header->reserved = 0;
144 __header->width = htonl(width);
145 __header->height = htonl(height);
146 __header->buffer_size = htonl(__buffer_size);
147 __header->capture_time_sec = htonl(capture_time_sec);
148 __header->capture_time_usec = htonl(capture_time_usec);
150 __capture_time = NULL;
152 memcpy(__buffer, buffer, __buffer_size);
157 FuseImageContent::~FuseImageContent()
159 delete __capture_time;
166 FuseImageContent::buffer()
const 176 FuseImageContent::buffer_size()
const 178 return __buffer_size;
186 FuseImageContent::pixel_width()
const 188 return ntohl(__header->width);
196 FuseImageContent::pixel_height()
const 198 return ntohl(__header->height);
206 FuseImageContent::colorspace()
const 208 return ntohs(__header->colorspace);
216 FuseImageContent::format()
const 218 return __header->format;
226 FuseImageContent::capture_time()
const 228 if ( ! __capture_time ) {
229 __capture_time =
new fawkes::Time(ntohl(__header->capture_time_sec),
230 ntohl(__header->capture_time_usec));
232 return __capture_time;
236 FuseImageContent::serialize()
253 FuseImageContent::decompress(
unsigned char *yuv422_planar_buffer,
size_t buffer_size)
255 if ( buffer_size < colorspace_buffer_size(YUV422_PLANAR, ntohs(__header->width),
256 ntohs(__header->height)) ) {
259 if ( __header->format != FUSE_IF_JPEG ) {
266 convert((colorspace_t)ntohs(__header->colorspace), YUV422_PLANAR,
267 __buffer, yuv422_planar_buffer,
268 ntohs(__header->width), ntohs(__header->height));
fawkes::Time capture_time() const
Get the time when the image was captured.
Decompressor for JPEG images.
virtual void decompress()
Decompress image.
virtual void set_compressed_buffer(unsigned char *buf, unsigned int buf_size)
Set compressed buffer.
const char * image_id() const
Get Image ID.
virtual void set_decompressed_buffer(unsigned char *buf, unsigned int buf_size)
Set decompressed buffer.
A class for handling time.
void lock_for_read()
Lock shared memory segment for reading.
unsigned char * buffer() const
Get image buffer.
Shared memory image buffer.
unsigned int width() const
Get image width.
Expected parameter is missing.
unsigned int height() const
Get image height.
System ran out of memory and desired operation could not be fulfilled.
void unlock()
Unlock memory.
colorspace_t colorspace() const
Get color space.