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;
442 java_vrpn_handle_region_change(
void *userdata,
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);
const unsigned vrpn_IMAGER_MAX_REGIONu12in16
Helper function to convert data for a sub-region of one channel of.
virtual int unregister_end_frame_handler(void *userdata, vrpn_IMAGERENDFRAMEHANDLER handler)
vrpn_Callback_List< vrpn_IMAGERDISCARDEDFRAMESCB > d_discarded_frames_list
vrpn_int32 d_frames_to_send
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.
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.
const vrpn_uint16 vrpn_IMAGER_VALTYPE_UINT12IN16
vrpn_int32 nCols(void) const
vrpn_int32 d_regionf32_m_id
vrpn_int32 d_begin_frame_m_id
void get_dCol(vrpn_float64 *dCol) const
This is the total span of the image in columns;.
void(VRPN_CALLBACK * vrpn_IMAGERBEGINFRAMEHANDLER)(void *userdata, const vrpn_IMAGERBEGINFRAMECB info)
vrpn_int32 nChannels(void) const
vrpn_int32 nRows(void) const
vrpn_int32 d_throttle_frames_m_id
ChannelCompression d_compression
void(VRPN_CALLBACK * vrpn_IMAGERREGIONHANDLER)(void *userdata, const vrpn_IMAGERREGIONCB info)
vrpn_int32 d_end_frame_m_id
vrpn_int32 nDepth(void) const
virtual int unregister_begin_frame_handler(void *userdata, vrpn_IMAGERBEGINFRAMEHANDLER handler)
const vrpn_uint16 vrpn_IMAGER_VALTYPE_UINT8
bool buffer(char **insertPt, vrpn_int32 *buflen) const
const vrpn_uint16 vrpn_IMAGER_VALTYPE_UNKNOWN
vrpn_int32 d_description_m_id
vrpn_uint16 d_dropped_due_to_throttle
Holds the description needed to convert from raw data to values for a channel.
void get_dDepth(vrpn_float64 *dDepth) const
This is the total span of the image in depth;.
This is the class users deal with: it tells the format and the region data when it arrives...
vrpn_int32 d_regionu8_m_id
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.
Generic connection class not specific to the transport mechanism.
virtual int register_types(void)=0
Register the types of messages this device sends/receives. Return 0 on success, -1 on fail...
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_region_handler(void *userdata, vrpn_IMAGERREGIONHANDLER handler)
vrpn_Callback_List< struct timeval > d_description_list
void(VRPN_CALLBACK * vrpn_IMAGERENDFRAMEHANDLER)(void *userdata, const vrpn_IMAGERENDFRAMECB info)
const vrpn_Imager_Region * region
vrpn_Imager_Channel(void)
All types of client/server/peer objects in VRPN should be derived from the vrpn_BaseClass type descri...
const unsigned vrpn_IMAGER_MAX_CHANNELS
virtual void mainloop()=0
Called once through each main loop iteration to handle updates. Remote object mainloop() should call ...
vrpn_Callback_List< vrpn_IMAGERBEGINFRAMECB > d_begin_frame_list
vrpn_uint16 get_val_type(void) const
char cName[100]
Length of names within VRPN.
This structure is what is passed to a vrpn_Connection message callback.
void(VRPN_CALLBACK * vrpn_IMAGERDISCARDEDFRAMESHANDLER)(void *userdata, const vrpn_IMAGERDISCARDEDFRAMESCB info)
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) ...
virtual int unregister_description_handler(void *userdata, vrpn_IMAGERDESCRIPTIONHANDLER handler)
vrpn_int32 d_regionu12in16_m_id
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_REGIONu16
virtual int register_begin_frame_handler(void *userdata, vrpn_IMAGERBEGINFRAMEHANDLER handler)
Register a handler for frame beginning (if the application cares)
void(VRPN_CALLBACK * vrpn_IMAGERDESCRIPTIONHANDLER)(void *userdata, const struct timeval msg_time)
virtual int register_description_handler(void *userdata, vrpn_IMAGERDESCRIPTIONHANDLER handler)
Register a handler for when the object's description changes (if desired)
Base class for Imager class.
vrpn_Callback_List< struct timeval > d_description_list
vrpn_int32 d_regionu16_m_id
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...
void(VRPN_CALLBACK * vrpn_IMAGERPOSEDESCRIPTIONHANDLER)(void *userdata, const struct timeval msg_time)
Class from which all user-level (and other) classes that communicate with vrpn_Connections should der...
const int vrpn_CONNECTION_TCP_BUFLEN
const vrpn_uint16 vrpn_IMAGER_VALTYPE_UINT16
vrpn_uint32 getNumVals() const
Returns the number of values in the region.
const vrpn_uint16 vrpn_IMAGER_VALTYPE_FLOAT32
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...
void get_origin(vrpn_float64 *origin) const
Returns the origin of the coordinate system,.
vrpn_Callback_List< vrpn_IMAGERENDFRAMECB > d_end_frame_list
bool is_description_valid()
have we gotten a description message yet?
void get_dRow(vrpn_float64 *dRow) const
This is the total span of the image in rows;.
vrpn_Callback_List< vrpn_IMAGERREGIONCB > d_region_list
virtual int register_discarded_frames_handler(void *userdata, vrpn_IMAGERDISCARDEDFRAMESHANDLER handler)
Register a handler for discarded frame notifications (if the application cares)
virtual int register_end_frame_handler(void *userdata, vrpn_IMAGERENDFRAMEHANDLER handler)
Register a handler for frame end (if the application cares)
bool unbuffer(const char **buffer)
vrpn_int32 d_description_m_id
virtual int unregister_description_handler(void *userdata, vrpn_IMAGERDESCRIPTIONHANDLER handler)
virtual int unregister_discarded_frames_handler(void *userdata, vrpn_IMAGERDISCARDEDFRAMESHANDLER handler)
const unsigned vrpn_IMAGER_MAX_REGIONf32
vrpn_int32 d_discarded_frames_m_id