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>
36 namespace firevision {
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));