39 - 8 *
sizeof(vrpn_int16)
40 - 6 *
sizeof(vrpn_int32)) /
44 - 8 *
sizeof(vrpn_int16)
45 - 6 *
sizeof(vrpn_int32)) /
50 - 8 *
sizeof(vrpn_int16)
51 - 6 *
sizeof(vrpn_int32)) /
66 minVal = maxVal = 0.0;
83 inline bool buffer(
char **insertPt, vrpn_int32 *buflen)
const
89 vrpn_buffer(insertPt, buflen, (vrpn_uint32)d_compression) ||
90 vrpn_buffer(insertPt, buflen, name,
sizeof(name)) ||
91 vrpn_buffer(insertPt, buflen, units,
sizeof(units))) {
101 vrpn_uint32 compression;
115 typedef enum { NONE = 0 } ChannelCompression;
125 vrpn_int32
nRows(
void)
const {
return d_nRows; };
126 vrpn_int32
nCols(
void)
const {
return d_nCols; };
127 vrpn_int32
nDepth(
void)
const {
return d_nDepth; };
128 vrpn_int32
nChannels(
void)
const {
return d_nChannels; };
137 virtual int register_types(
void);
162 vrpn_int32 nRows, vrpn_int32 nDepth = 1);
166 int add_channel(
const char *name,
const char *units =
"unsigned8bit",
167 vrpn_float32 minVal = 0, vrpn_float32 maxVal = 255,
168 vrpn_float32 scale = 1, vrpn_float32 offset = 0);
176 bool send_begin_frame(
const vrpn_uint16 cMin,
const vrpn_uint16 cMax,
177 const vrpn_uint16 rMin,
const vrpn_uint16 rMax,
178 const vrpn_uint16 dMin = 0,
179 const vrpn_uint16 dMax = 0,
180 const struct timeval *time = NULL);
181 bool send_end_frame(
const vrpn_uint16 cMin,
const vrpn_uint16 cMax,
182 const vrpn_uint16 rMin,
const vrpn_uint16 rMax,
183 const vrpn_uint16 dMin = 0,
const vrpn_uint16 dMax = 0,
184 const struct timeval *time = NULL);
185 bool send_discarded_frames(
const vrpn_uint16 count = 0,
186 const struct timeval *time = NULL);
194 bool send_region_using_base_pointer(
195 vrpn_int16 chanIndex, vrpn_uint16 cMin, vrpn_uint16 cMax,
196 vrpn_uint16 rMin, vrpn_uint16 rMax,
const vrpn_uint8 *data,
197 vrpn_uint32 colStride, vrpn_uint32 rowStride, vrpn_uint16 nRows = 0,
198 bool invert_rows =
false, vrpn_uint32 depthStride = 0,
199 vrpn_uint16 dMin = 0, vrpn_uint16 dMax = 0,
200 const struct timeval *time = NULL);
201 bool send_region_using_base_pointer(
202 vrpn_int16 chanIndex, vrpn_uint16 cMin, vrpn_uint16 cMax,
203 vrpn_uint16 rMin, vrpn_uint16 rMax,
const vrpn_uint16 *data,
204 vrpn_uint32 colStride, vrpn_uint32 rowStride, vrpn_uint16 nRows = 0,
205 bool invert_rows =
false, vrpn_uint32 depthStride = 0,
206 vrpn_uint16 dMin = 0, vrpn_uint16 dMax = 0,
207 const struct timeval *time = NULL);
208 bool send_region_using_base_pointer(
209 vrpn_int16 chanIndex, vrpn_uint16 cMin, vrpn_uint16 cMax,
210 vrpn_uint16 rMin, vrpn_uint16 rMax,
const vrpn_float32 *data,
211 vrpn_uint32 colStride, vrpn_uint32 rowStride, vrpn_uint16 nRows = 0,
212 bool invert_rows =
false, vrpn_uint32 depthStride = 0,
213 vrpn_uint16 dMin = 0, vrpn_uint16 dMax = 0,
214 const struct timeval *time = NULL);
228 bool send_region_using_first_pointer(
229 vrpn_int16 chanIndex, vrpn_uint16 cMin, vrpn_uint16 cMax,
230 vrpn_uint16 rMin, vrpn_uint16 rMax,
const vrpn_uint8 *data,
231 vrpn_uint32 colStride, vrpn_uint32 rowStride, vrpn_uint16 nRows = 0,
232 bool invert_rows =
false, vrpn_uint32 depthStride = 0,
233 vrpn_uint16 dMin = 0, vrpn_uint16 dMax = 0,
234 const struct timeval *time = NULL);
235 bool send_region_using_first_pointer(
236 vrpn_int16 chanIndex, vrpn_uint16 cMin, vrpn_uint16 cMax,
237 vrpn_uint16 rMin, vrpn_uint16 rMax,
const vrpn_uint16 *data,
238 vrpn_uint32 colStride, vrpn_uint32 rowStride, vrpn_uint16 nRows = 0,
239 bool invert_rows =
false, vrpn_uint32 depthStride = 0,
240 vrpn_uint16 dMin = 0, vrpn_uint16 dMax = 0,
241 const struct timeval *time = NULL);
242 bool send_region_using_first_pointer(
243 vrpn_int16 chanIndex, vrpn_uint16 cMin, vrpn_uint16 cMax,
244 vrpn_uint16 rMin, vrpn_uint16 rMax,
const vrpn_float32 *data,
245 vrpn_uint32 colStride, vrpn_uint32 rowStride, vrpn_uint16 nRows = 0,
246 bool invert_rows =
false, vrpn_uint32 depthStride = 0,
247 vrpn_uint16 dMin = 0, vrpn_uint16 dMax = 0,
248 const struct timeval *time = NULL);
252 bool set_resolution(vrpn_int32 nCols, vrpn_int32 nRows,
253 vrpn_int32 nDepth = 1);
257 bool send_description(
void);
260 virtual void mainloop(
void);
292 memcpy(origin, d_origin,
sizeof(d_origin));
302 memcpy(dCol, d_dCol,
sizeof(d_dCol));
311 memcpy(dRow, d_dRow,
sizeof(d_dRow));
321 memcpy(dDepth, d_dDepth,
sizeof(d_dDepth));
330 bool compute_pixel_center(vrpn_float64 *center,
const vrpn_Imager &image,
331 vrpn_uint16 col, vrpn_uint16 row,
332 vrpn_uint16 depth = 0);
335 vrpn_float64 d_origin[3];
338 vrpn_float64 d_dRow[3];
339 vrpn_float64 d_dDepth[3];
341 virtual int register_types(
void);
349 const vrpn_float64 dCol[3],
350 const vrpn_float64 dRow[3],
351 const vrpn_float64 *dDepth = NULL,
355 bool set_range(
const vrpn_float64 origin[3],
const vrpn_float64 dCol[3],
356 const vrpn_float64 dRow[3],
357 const vrpn_float64 *dDepth = NULL);
361 bool send_description(
void);
364 virtual void mainloop(
void);
392typedef struct _vrpn_IMAGERREGIONCB {
393 struct timeval msg_time;
403 void *userdata,
const struct timeval msg_time);
405typedef struct _vrpn_IMAGERBEGINFRAMECB {
406 struct timeval msg_time;
415typedef struct _vrpn_IMAGERENDFRAMECB {
416 struct timeval msg_time;
425typedef struct _vrpn_IMAGERDISCARDEDFRAMESCB {
426 struct timeval msg_time;
452 d_rMin = d_rMax = d_cMin = d_cMax = 0;
465 return (d_rMax - d_rMin + 1) * (d_cMax - d_cMin + 1);
474 vrpn_uint8 &val, vrpn_uint16 d = 0)
const
476 if (!d_valid || (c < d_cMin) || (c > d_cMax) || (r < d_rMin) ||
478 fprintf(stderr,
"vrpn_Imager_Region::read_unscaled_pixel(): "
479 "Invalid region or out of range\n");
484 fprintf(stderr,
"XXX "
485 "vrpn_Imager_Region::read_unscaled_pixel(): "
486 "Transcoding not implemented yet\n");
495 ((
const vrpn_uint8 *)
496 d_valBuf)[(c - d_cMin) +
497 (d_cMax - d_cMin + 1) *
499 (d - d_dMin) * (d_rMax - d_rMin + 1))];
510 vrpn_uint16 &val, vrpn_uint16 d = 0)
const
512 if (!d_valid || (d < d_dMin) || (d > d_dMax) || (c < d_cMin) ||
513 (c > d_cMax) || (r < d_rMin) || (r > d_rMax)) {
514 fprintf(stderr,
"vrpn_Imager_Region::read_unscaled_pixel(): "
515 "Invalid region or out of range\n");
521 fprintf(stderr,
"XXX "
522 "vrpn_Imager_Region::read_unscaled_pixel(): "
523 "Transcoding not implemented yet\n");
526 else if (vrpn_big_endian) {
527 fprintf(stderr,
"XXX "
528 "vrpn_Imager_Region::read_unscaled_pixel(): "
529 "Not implemented on big-endian yet\n");
538 ((
const vrpn_uint16 *)
539 d_valBuf)[(c - d_cMin) +
540 (d_cMax - d_cMin + 1) *
542 (d - d_dMin) * (d_rMax - d_rMin + 1))];
553 vrpn_float32 &val, vrpn_uint16 d = 0)
const
555 if (!d_valid || (d < d_dMin) || (d > d_dMax) || (c < d_cMin) ||
556 (c > d_cMax) || (r < d_rMin) || (r > d_rMax)) {
557 fprintf(stderr,
"vrpn_Imager_Region::read_unscaled_pixel(): "
558 "Invalid region or out of range\n");
563 fprintf(stderr,
"XXX "
564 "vrpn_Imager_Region::read_unscaled_pixel(): "
565 "Transcoding not implemented yet\n");
568 else if (vrpn_big_endian) {
569 fprintf(stderr,
"XXX "
570 "vrpn_Imager_Region::read_unscaled_pixel(): "
571 "Not implemented on big-endian yet\n");
580 ((
const vrpn_float32 *)
581 d_valBuf)[(c - d_cMin) +
582 (d_cMax - d_cMin + 1) *
584 (d - d_dMin) * (d_rMax - d_rMin + 1))];
592 bool decode_unscaled_region_using_base_pointer(
593 vrpn_uint8 *data, vrpn_uint32 colStride, vrpn_uint32 rowStride,
594 vrpn_uint32 depthStride = 0, vrpn_uint16 nRows = 0,
595 bool invert_rows =
false,
unsigned repeat = 1)
const;
597 bool decode_unscaled_region_using_base_pointer(
598 vrpn_uint16 *data, vrpn_uint32 colStride, vrpn_uint32 rowStride,
599 vrpn_uint32 depthStride = 0, vrpn_uint16 nRows = 0,
600 bool invert_rows =
false,
unsigned repeat = 1)
const;
601 bool decode_unscaled_region_using_base_pointer(
602 vrpn_float32 *data, vrpn_uint32 colStride, vrpn_uint32 rowStride,
603 vrpn_uint32 depthStride = 0, vrpn_uint16 nRows = 0,
604 bool invert_rows =
false,
unsigned repeat = 1)
const;
635 return d_region_list.register_handler(userdata, handler);
640 return d_region_list.unregister_handler(userdata, handler);
649 return d_description_list.register_handler(userdata, handler);
655 return d_description_list.unregister_handler(userdata, handler);
663 return d_begin_frame_list.register_handler(userdata, handler);
669 return d_begin_frame_list.unregister_handler(userdata, handler);
676 return d_end_frame_list.register_handler(userdata, handler);
681 return d_end_frame_list.unregister_handler(userdata, handler);
690 return d_discarded_frames_list.register_handler(userdata, handler);
695 return d_discarded_frames_list.unregister_handler(userdata, handler);
707 virtual bool throttle_sender(vrpn_int32 N);
723 virtual void mainloop(
void);
771 void *userdata,
const struct timeval msg_time);
783 return d_description_list.register_handler(userdata, handler);
789 return d_description_list.unregister_handler(userdata, handler);
793 virtual void mainloop(
void);
Class from which all user-level (and other) classes that communicate with vrpn_Connections should der...
Generic connection class not specific to the transport mechanism.
virtual int unregister_description_handler(void *userdata, vrpn_IMAGERDESCRIPTIONHANDLER handler)
virtual int register_description_handler(void *userdata, vrpn_IMAGERDESCRIPTIONHANDLER handler)
Register a handler for when the object's description changes (if desired)
vrpn_Callback_List< struct timeval > d_description_list
vrpn_int32 d_description_m_id
void get_origin(vrpn_float64 *origin) const
Returns the origin of the coordinate system,.
void get_dRow(vrpn_float64 *dRow) const
This is the total span of the image in rows;.
void get_dDepth(vrpn_float64 *dDepth) const
This is the total span of the image in depth;.
void get_dCol(vrpn_float64 *dCol) const
This is the total span of the image in columns;.
Holds the description needed to convert from raw data to values for a channel.
ChannelCompression d_compression
bool buffer(char **insertPt, vrpn_int32 *buflen) const
vrpn_Imager_Channel(void)
bool unbuffer(const char **buffer)
Helper function to convert data for a sub-region of one channel of.
bool read_unscaled_pixel(vrpn_uint16 c, vrpn_uint16 r, vrpn_uint16 &val, vrpn_uint16 d=0) const
Reads pixel from the region with no scale and offset applied to the value. Not.
vrpn_uint16 get_val_type(void) const
vrpn_uint32 getNumVals() const
Returns the number of values in the region.
friend void VRPN_CALLBACK java_vrpn_handle_region_change(void *userdata, const vrpn_IMAGERREGIONCB info)
bool read_unscaled_pixel(vrpn_uint16 c, vrpn_uint16 r, vrpn_float32 &val, vrpn_uint16 d=0) const
Reads pixel from the region with no scale and offset applied to the value. Not.
bool read_unscaled_pixel(vrpn_uint16 c, vrpn_uint16 r, vrpn_uint8 &val, vrpn_uint16 d=0) const
Reads pixel from the region with no scale and offset applied to the value. Not the most efficient way...
This is the class users deal with: it tells the format and the region data when it arrives.
virtual int register_description_handler(void *userdata, vrpn_IMAGERDESCRIPTIONHANDLER handler)
Register a handler for when the object's description changes (if desired).
virtual int unregister_discarded_frames_handler(void *userdata, vrpn_IMAGERDISCARDEDFRAMESHANDLER handler)
virtual int unregister_region_handler(void *userdata, vrpn_IMAGERREGIONHANDLER handler)
virtual int register_region_handler(void *userdata, vrpn_IMAGERREGIONHANDLER handler)
Register a handler for when new data arrives (can look up info in object when this happens)
vrpn_Callback_List< vrpn_IMAGERBEGINFRAMECB > d_begin_frame_list
virtual int register_begin_frame_handler(void *userdata, vrpn_IMAGERBEGINFRAMEHANDLER handler)
Register a handler for frame beginning (if the application cares)
vrpn_Callback_List< vrpn_IMAGERENDFRAMECB > d_end_frame_list
vrpn_Callback_List< vrpn_IMAGERDISCARDEDFRAMESCB > d_discarded_frames_list
bool is_description_valid()
have we gotten a description message yet?
virtual int unregister_end_frame_handler(void *userdata, vrpn_IMAGERENDFRAMEHANDLER handler)
virtual int register_end_frame_handler(void *userdata, vrpn_IMAGERENDFRAMEHANDLER handler)
Register a handler for frame end (if the application cares)
virtual int unregister_begin_frame_handler(void *userdata, vrpn_IMAGERBEGINFRAMEHANDLER handler)
virtual int register_discarded_frames_handler(void *userdata, vrpn_IMAGERDISCARDEDFRAMESHANDLER handler)
Register a handler for discarded frame notifications (if the application cares)
vrpn_Callback_List< struct timeval > d_description_list
vrpn_Callback_List< vrpn_IMAGERREGIONCB > d_region_list
virtual int unregister_description_handler(void *userdata, vrpn_IMAGERDESCRIPTIONHANDLER handler)
vrpn_int32 d_frames_to_send
vrpn_uint16 d_dropped_due_to_throttle
Base class for Imager class.
vrpn_int32 d_description_m_id
vrpn_int32 nDepth(void) const
vrpn_int32 nChannels(void) const
vrpn_int32 d_regionf32_m_id
vrpn_int32 nCols(void) const
vrpn_int32 d_throttle_frames_m_id
vrpn_int32 d_begin_frame_m_id
vrpn_int32 d_regionu8_m_id
vrpn_int32 d_end_frame_m_id
vrpn_int32 d_regionu12in16_m_id
vrpn_int32 nRows(void) const
vrpn_int32 d_regionu16_m_id
vrpn_int32 d_discarded_frames_m_id
This structure is what is passed to a vrpn_Connection message callback.
const vrpn_Imager_Region * region
All types of client/server/peer objects in VRPN should be derived from the vrpn_BaseClass type descri...
char cName[100]
Length of names within VRPN.
const int vrpn_CONNECTION_TCP_BUFLEN
void(VRPN_CALLBACK * vrpn_IMAGERDESCRIPTIONHANDLER)(void *userdata, const struct timeval msg_time)
const unsigned vrpn_IMAGER_MAX_REGIONf32
const vrpn_uint16 vrpn_IMAGER_VALTYPE_FLOAT32
const unsigned vrpn_IMAGER_MAX_REGIONu8
Set of constants to tell how many points you can put into a region depending on the type you are putt...
const unsigned vrpn_IMAGER_MAX_REGIONu12in16
void(VRPN_CALLBACK * vrpn_IMAGERDISCARDEDFRAMESHANDLER)(void *userdata, const vrpn_IMAGERDISCARDEDFRAMESCB info)
const vrpn_uint16 vrpn_IMAGER_VALTYPE_UINT16
const unsigned vrpn_IMAGER_MAX_REGIONu16
void(VRPN_CALLBACK * vrpn_IMAGERREGIONHANDLER)(void *userdata, const vrpn_IMAGERREGIONCB info)
void(VRPN_CALLBACK * vrpn_IMAGERBEGINFRAMEHANDLER)(void *userdata, const vrpn_IMAGERBEGINFRAMECB info)
void(VRPN_CALLBACK * vrpn_IMAGERPOSEDESCRIPTIONHANDLER)(void *userdata, const struct timeval msg_time)
const vrpn_uint16 vrpn_IMAGER_VALTYPE_UINT8
const vrpn_uint16 vrpn_IMAGER_VALTYPE_UINT12IN16
const unsigned vrpn_IMAGER_MAX_CHANNELS
const vrpn_uint16 vrpn_IMAGER_VALTYPE_UNKNOWN
void(VRPN_CALLBACK * vrpn_IMAGERENDFRAMEHANDLER)(void *userdata, const vrpn_IMAGERENDFRAMECB info)
VRPN_API int vrpn_unbuffer(const char **buffer, timeval *t)
Utility routine for taking a struct timeval from a buffer that was sent as a message.
VRPN_API int vrpn_buffer(char **insertPt, vrpn_int32 *buflen, const timeval t)
Utility routine for placing a timeval struct into a buffer that is to be sent as a message.