39 6 *
sizeof(vrpn_int32)) /
43 6 *
sizeof(vrpn_int32)) /
48 6 *
sizeof(vrpn_int32)) /
63 minVal = maxVal = 0.0;
80 inline bool buffer(
char **insertPt, vrpn_int32 *buflen)
const
86 vrpn_buffer(insertPt, buflen, (vrpn_uint32)d_compression) ||
87 vrpn_buffer(insertPt, buflen, name,
sizeof(name)) ||
88 vrpn_buffer(insertPt, buflen, units,
sizeof(units))) {
98 vrpn_uint32 compression;
112 typedef enum { NONE = 0 } ChannelCompression;
122 vrpn_int32
nRows(
void)
const {
return d_nRows; };
123 vrpn_int32
nCols(
void)
const {
return d_nCols; };
124 vrpn_int32
nDepth(
void)
const {
return d_nDepth; };
125 vrpn_int32
nChannels(
void)
const {
return d_nChannels; };
159 vrpn_int32 nRows, vrpn_int32 nDepth = 1);
163 int add_channel(
const char *name,
const char *units =
"unsigned8bit",
164 vrpn_float32 minVal = 0, vrpn_float32 maxVal = 255,
165 vrpn_float32 scale = 1, vrpn_float32 offset = 0);
173 bool send_begin_frame(
const vrpn_uint16 cMin,
const vrpn_uint16 cMax,
174 const vrpn_uint16 rMin,
const vrpn_uint16 rMax,
175 const vrpn_uint16 dMin = 0,
176 const vrpn_uint16 dMax = 0,
177 const struct timeval *time = NULL);
178 bool send_end_frame(
const vrpn_uint16 cMin,
const vrpn_uint16 cMax,
179 const vrpn_uint16 rMin,
const vrpn_uint16 rMax,
180 const vrpn_uint16 dMin = 0,
const vrpn_uint16 dMax = 0,
181 const struct timeval *time = NULL);
182 bool send_discarded_frames(
const vrpn_uint16 count = 0,
183 const struct timeval *time = NULL);
191 bool send_region_using_base_pointer(
192 vrpn_int16 chanIndex, vrpn_uint16 cMin, vrpn_uint16 cMax,
193 vrpn_uint16 rMin, vrpn_uint16 rMax,
const vrpn_uint8 *data,
194 vrpn_uint32 colStride, vrpn_uint32 rowStride, vrpn_uint16 nRows = 0,
195 bool invert_rows =
false, vrpn_uint32 depthStride = 0,
196 vrpn_uint16 dMin = 0, vrpn_uint16 dMax = 0,
197 const struct timeval *time = NULL);
198 bool send_region_using_base_pointer(
199 vrpn_int16 chanIndex, vrpn_uint16 cMin, vrpn_uint16 cMax,
200 vrpn_uint16 rMin, vrpn_uint16 rMax,
const vrpn_uint16 *data,
201 vrpn_uint32 colStride, vrpn_uint32 rowStride, vrpn_uint16 nRows = 0,
202 bool invert_rows =
false, vrpn_uint32 depthStride = 0,
203 vrpn_uint16 dMin = 0, vrpn_uint16 dMax = 0,
204 const struct timeval *time = NULL);
205 bool send_region_using_base_pointer(
206 vrpn_int16 chanIndex, vrpn_uint16 cMin, vrpn_uint16 cMax,
207 vrpn_uint16 rMin, vrpn_uint16 rMax,
const vrpn_float32 *data,
208 vrpn_uint32 colStride, vrpn_uint32 rowStride, vrpn_uint16 nRows = 0,
209 bool invert_rows =
false, vrpn_uint32 depthStride = 0,
210 vrpn_uint16 dMin = 0, vrpn_uint16 dMax = 0,
211 const struct timeval *time = NULL);
225 bool send_region_using_first_pointer(
226 vrpn_int16 chanIndex, vrpn_uint16 cMin, vrpn_uint16 cMax,
227 vrpn_uint16 rMin, vrpn_uint16 rMax,
const vrpn_uint8 *data,
228 vrpn_uint32 colStride, vrpn_uint32 rowStride, vrpn_uint16 nRows = 0,
229 bool invert_rows =
false, vrpn_uint32 depthStride = 0,
230 vrpn_uint16 dMin = 0, vrpn_uint16 dMax = 0,
231 const struct timeval *time = NULL);
232 bool send_region_using_first_pointer(
233 vrpn_int16 chanIndex, vrpn_uint16 cMin, vrpn_uint16 cMax,
234 vrpn_uint16 rMin, vrpn_uint16 rMax,
const vrpn_uint16 *data,
235 vrpn_uint32 colStride, vrpn_uint32 rowStride, vrpn_uint16 nRows = 0,
236 bool invert_rows =
false, vrpn_uint32 depthStride = 0,
237 vrpn_uint16 dMin = 0, vrpn_uint16 dMax = 0,
238 const struct timeval *time = NULL);
239 bool send_region_using_first_pointer(
240 vrpn_int16 chanIndex, vrpn_uint16 cMin, vrpn_uint16 cMax,
241 vrpn_uint16 rMin, vrpn_uint16 rMax,
const vrpn_float32 *data,
242 vrpn_uint32 colStride, vrpn_uint32 rowStride, vrpn_uint16 nRows = 0,
243 bool invert_rows =
false, vrpn_uint32 depthStride = 0,
244 vrpn_uint16 dMin = 0, vrpn_uint16 dMax = 0,
245 const struct timeval *time = NULL);
249 bool set_resolution(vrpn_int32 nCols, vrpn_int32 nRows,
250 vrpn_int32 nDepth = 1);
254 bool send_description(
void);
289 memcpy(origin, d_origin,
sizeof(d_origin));
299 memcpy(dCol, d_dCol,
sizeof(d_dCol));
308 memcpy(dRow, d_dRow,
sizeof(d_dRow));
318 memcpy(dDepth, d_dDepth,
sizeof(d_dDepth));
327 bool compute_pixel_center(vrpn_float64 *center,
const vrpn_Imager &image,
328 vrpn_uint16 col, vrpn_uint16 row,
329 vrpn_uint16 depth = 0);
332 vrpn_float64 d_origin[3];
335 vrpn_float64 d_dRow[3];
336 vrpn_float64 d_dDepth[3];
346 const vrpn_float64 dCol[3],
347 const vrpn_float64 dRow[3],
348 const vrpn_float64 *dDepth = NULL,
352 bool set_range(
const vrpn_float64 origin[3],
const vrpn_float64 dCol[3],
353 const vrpn_float64 dRow[3],
354 const vrpn_float64 *dDepth = NULL);
358 bool send_description(
void);
389 typedef struct _vrpn_IMAGERREGIONCB {
390 struct timeval msg_time;
400 void *userdata,
const struct timeval msg_time);
402 typedef struct _vrpn_IMAGERBEGINFRAMECB {
403 struct timeval msg_time;
412 typedef struct _vrpn_IMAGERENDFRAMECB {
413 struct timeval msg_time;
422 typedef struct _vrpn_IMAGERDISCARDEDFRAMESCB {
423 struct timeval msg_time;
449 d_rMin = d_rMax = d_cMin = d_cMax = 0;
462 return (d_rMax - d_rMin + 1) * (d_cMax - d_cMin + 1);
471 vrpn_uint8 &val, vrpn_uint16 d = 0)
const
473 if (!d_valid || (c < d_cMin) || (c > d_cMax) || (r < d_rMin) ||
475 fprintf(stderr,
"vrpn_Imager_Region::read_unscaled_pixel(): "
476 "Invalid region or out of range\n");
481 fprintf(stderr,
"XXX "
482 "vrpn_Imager_Region::read_unscaled_pixel(): "
483 "Transcoding not implemented yet\n");
493 d_valBuf)[(c - d_cMin) +
494 (d_cMax - d_cMin + 1) *
496 (d - d_dMin) * (d_rMax - d_rMin + 1))];
507 vrpn_uint16 &val, vrpn_uint16 d = 0)
const
509 if (!d_valid || (d < d_dMin) || (d > d_dMax) || (c < d_cMin) ||
510 (c > d_cMax) || (r < d_rMin) || (r > d_rMax)) {
511 fprintf(stderr,
"vrpn_Imager_Region::read_unscaled_pixel(): "
512 "Invalid region or out of range\n");
518 fprintf(stderr,
"XXX "
519 "vrpn_Imager_Region::read_unscaled_pixel(): "
520 "Transcoding not implemented yet\n");
523 else if (vrpn_big_endian) {
524 fprintf(stderr,
"XXX "
525 "vrpn_Imager_Region::read_unscaled_pixel(): "
526 "Not implemented on big-endian yet\n");
536 d_valBuf)[(c - d_cMin) +
537 (d_cMax - d_cMin + 1) *
539 (d - d_dMin) * (d_rMax - d_rMin + 1))];
550 vrpn_float32 &val, vrpn_uint16 d = 0)
const
552 if (!d_valid || (d < d_dMin) || (d > d_dMax) || (c < d_cMin) ||
553 (c > d_cMax) || (r < d_rMin) || (r > d_rMax)) {
554 fprintf(stderr,
"vrpn_Imager_Region::read_unscaled_pixel(): "
555 "Invalid region or out of range\n");
560 fprintf(stderr,
"XXX "
561 "vrpn_Imager_Region::read_unscaled_pixel(): "
562 "Transcoding not implemented yet\n");
565 else if (vrpn_big_endian) {
566 fprintf(stderr,
"XXX "
567 "vrpn_Imager_Region::read_unscaled_pixel(): "
568 "Not implemented on big-endian yet\n");
578 d_valBuf)[(c - d_cMin) +
579 (d_cMax - d_cMin + 1) *
581 (d - d_dMin) * (d_rMax - d_rMin + 1))];
589 bool decode_unscaled_region_using_base_pointer(
590 vrpn_uint8 *data, vrpn_uint32 colStride, vrpn_uint32 rowStride,
591 vrpn_uint32 depthStride = 0, vrpn_uint16 nRows = 0,
592 bool invert_rows =
false,
unsigned repeat = 1)
const;
594 bool decode_unscaled_region_using_base_pointer(
595 vrpn_uint16 *data, vrpn_uint32 colStride, vrpn_uint32 rowStride,
596 vrpn_uint32 depthStride = 0, vrpn_uint16 nRows = 0,
597 bool invert_rows =
false,
unsigned repeat = 1)
const;
598 bool decode_unscaled_region_using_base_pointer(
599 vrpn_float32 *data, vrpn_uint32 colStride, vrpn_uint32 rowStride,
600 vrpn_uint32 depthStride = 0, vrpn_uint16 nRows = 0,
601 bool invert_rows =
false,
unsigned repeat = 1)
const;
632 return d_region_list.register_handler(userdata, handler);
637 return d_region_list.unregister_handler(userdata, handler);
646 return d_description_list.register_handler(userdata, handler);
652 return d_description_list.unregister_handler(userdata, handler);
660 return d_begin_frame_list.register_handler(userdata, handler);
666 return d_begin_frame_list.unregister_handler(userdata, handler);
673 return d_end_frame_list.register_handler(userdata, handler);
678 return d_end_frame_list.unregister_handler(userdata, handler);
687 return d_discarded_frames_list.register_handler(userdata, handler);
692 return d_discarded_frames_list.unregister_handler(userdata, handler);
704 virtual bool throttle_sender(vrpn_int32 N);
768 void *userdata,
const struct timeval msg_time);
780 return d_description_list.register_handler(userdata, handler);
786 return d_description_list.unregister_handler(userdata, handler);