@@ -783,56 +783,55 @@ static int freenect_fetch_reg_info(freenect_device *dev)
783783 FN_ERROR ("freenect_fetch_reg_info: send_cmd read %d bytes (expected 118)\n" , res );
784784 return -1 ;
785785 }
786- freenect_reg_info * reg_info_ptr = (freenect_reg_info * )(& reply [2 ]);
787- freenect_reg_info * dev_reg_info = & (dev -> registration .reg_info );
788- dev_reg_info -> ax = fn_le32s (reg_info_ptr -> ax );
789- dev_reg_info -> bx = fn_le32s (reg_info_ptr -> bx );
790- dev_reg_info -> cx = fn_le32s (reg_info_ptr -> cx );
791- dev_reg_info -> dx = fn_le32s (reg_info_ptr -> dx );
792- dev_reg_info -> ay = fn_le32s (reg_info_ptr -> ay );
793- dev_reg_info -> by = fn_le32s (reg_info_ptr -> by );
794- dev_reg_info -> cy = fn_le32s (reg_info_ptr -> cy );
795- dev_reg_info -> dy = fn_le32s (reg_info_ptr -> dy );
796- dev_reg_info -> dx_start = fn_le32s (reg_info_ptr -> dx_start );
797- dev_reg_info -> dy_start = fn_le32s (reg_info_ptr -> dy_start );
798- dev_reg_info -> dx_beta_start = fn_le32s (reg_info_ptr -> dx_beta_start );
799- dev_reg_info -> dy_beta_start = fn_le32s (reg_info_ptr -> dy_beta_start );
800- dev_reg_info -> dx_beta_inc = fn_le32s (reg_info_ptr -> dx_beta_inc );
801- dev_reg_info -> dy_beta_inc = fn_le32s (reg_info_ptr -> dy_beta_inc );
802- dev_reg_info -> dxdx_start = fn_le32s (reg_info_ptr -> dxdx_start );
803- dev_reg_info -> dxdy_start = fn_le32s (reg_info_ptr -> dxdy_start );
804- dev_reg_info -> dydx_start = fn_le32s (reg_info_ptr -> dydx_start );
805- dev_reg_info -> dydy_start = fn_le32s (reg_info_ptr -> dydy_start );
806- dev_reg_info -> dxdxdx_start = fn_le32s (reg_info_ptr -> dxdxdx_start );
807- dev_reg_info -> dydxdx_start = fn_le32s (reg_info_ptr -> dydxdx_start );
808- dev_reg_info -> dxdxdy_start = fn_le32s (reg_info_ptr -> dxdxdy_start );
809- dev_reg_info -> dydxdy_start = fn_le32s (reg_info_ptr -> dydxdy_start );
810- dev_reg_info -> dydydx_start = fn_le32s (reg_info_ptr -> dydydx_start );
811- dev_reg_info -> dydydy_start = fn_le32s (reg_info_ptr -> dydydy_start );
812- FN_SPEW ("ax: %d\n" , dev_reg_info -> ax );
813- FN_SPEW ("bx: %d\n" , dev_reg_info -> bx );
814- FN_SPEW ("cx: %d\n" , dev_reg_info -> cx );
815- FN_SPEW ("dx: %d\n" , dev_reg_info -> dx );
816- FN_SPEW ("ay: %d\n" , dev_reg_info -> ay );
817- FN_SPEW ("by: %d\n" , dev_reg_info -> by );
818- FN_SPEW ("cy: %d\n" , dev_reg_info -> cy );
819- FN_SPEW ("dy: %d\n" , dev_reg_info -> dy );
820- FN_SPEW ("dx_start: %d\n" , dev_reg_info -> dx_start );
821- FN_SPEW ("dy_start: %d\n" , dev_reg_info -> dy_start );
822- FN_SPEW ("dx_beta_start: %d\n" , dev_reg_info -> dx_beta_start );
823- FN_SPEW ("dy_beta_start: %d\n" , dev_reg_info -> dy_beta_start );
824- FN_SPEW ("dx_beta_inc: %d\n" , dev_reg_info -> dx_beta_inc );
825- FN_SPEW ("dy_beta_inc: %d\n" , dev_reg_info -> dy_beta_inc );
826- FN_SPEW ("dxdx_start: %d\n" , dev_reg_info -> dxdx_start );
827- FN_SPEW ("dxdy_start: %d\n" , dev_reg_info -> dxdy_start );
828- FN_SPEW ("dydx_start: %d\n" , dev_reg_info -> dydx_start );
829- FN_SPEW ("dydy_start: %d\n" , dev_reg_info -> dydy_start );
830- FN_SPEW ("dxdxdx_start: %d\n" , dev_reg_info -> dxdxdx_start );
831- FN_SPEW ("dydxdx_start: %d\n" , dev_reg_info -> dydxdx_start );
832- FN_SPEW ("dxdxdy_start: %d\n" , dev_reg_info -> dxdxdy_start );
833- FN_SPEW ("dydxdy_start: %d\n" , dev_reg_info -> dydxdy_start );
834- FN_SPEW ("dydydx_start: %d\n" , dev_reg_info -> dydydx_start );
835- FN_SPEW ("dydydy_start: %d\n" , dev_reg_info -> dydydy_start );
786+ memcpy (& dev -> registration .reg_info , reply + 2 , sizeof (dev -> registration .reg_info ));
787+ dev -> registration .reg_info .ax = fn_le32s (dev -> registration .reg_info .ax );
788+ dev -> registration .reg_info .bx = fn_le32s (dev -> registration .reg_info .bx );
789+ dev -> registration .reg_info .cx = fn_le32s (dev -> registration .reg_info .cx );
790+ dev -> registration .reg_info .dx = fn_le32s (dev -> registration .reg_info .dx );
791+ dev -> registration .reg_info .ay = fn_le32s (dev -> registration .reg_info .ay );
792+ dev -> registration .reg_info .by = fn_le32s (dev -> registration .reg_info .by );
793+ dev -> registration .reg_info .cy = fn_le32s (dev -> registration .reg_info .cy );
794+ dev -> registration .reg_info .dy = fn_le32s (dev -> registration .reg_info .dy );
795+ dev -> registration .reg_info .dx_start = fn_le32s (dev -> registration .reg_info .dx_start );
796+ dev -> registration .reg_info .dy_start = fn_le32s (dev -> registration .reg_info .dy_start );
797+ dev -> registration .reg_info .dx_beta_start = fn_le32s (dev -> registration .reg_info .dx_beta_start );
798+ dev -> registration .reg_info .dy_beta_start = fn_le32s (dev -> registration .reg_info .dy_beta_start );
799+ dev -> registration .reg_info .dx_beta_inc = fn_le32s (dev -> registration .reg_info .dx_beta_inc );
800+ dev -> registration .reg_info .dy_beta_inc = fn_le32s (dev -> registration .reg_info .dy_beta_inc );
801+ dev -> registration .reg_info .dxdx_start = fn_le32s (dev -> registration .reg_info .dxdx_start );
802+ dev -> registration .reg_info .dxdy_start = fn_le32s (dev -> registration .reg_info .dxdy_start );
803+ dev -> registration .reg_info .dydx_start = fn_le32s (dev -> registration .reg_info .dydx_start );
804+ dev -> registration .reg_info .dydy_start = fn_le32s (dev -> registration .reg_info .dydy_start );
805+ dev -> registration .reg_info .dxdxdx_start = fn_le32s (dev -> registration .reg_info .dxdxdx_start );
806+ dev -> registration .reg_info .dydxdx_start = fn_le32s (dev -> registration .reg_info .dydxdx_start );
807+ dev -> registration .reg_info .dxdxdy_start = fn_le32s (dev -> registration .reg_info .dxdxdy_start );
808+ dev -> registration .reg_info .dydxdy_start = fn_le32s (dev -> registration .reg_info .dydxdy_start );
809+ dev -> registration .reg_info .dydydx_start = fn_le32s (dev -> registration .reg_info .dydydx_start );
810+ dev -> registration .reg_info .dydydy_start = fn_le32s (dev -> registration .reg_info .dydydy_start );
811+ FN_SPEW ("ax: %d\n" , dev -> registration .reg_info .ax );
812+ FN_SPEW ("bx: %d\n" , dev -> registration .reg_info .bx );
813+ FN_SPEW ("cx: %d\n" , dev -> registration .reg_info .cx );
814+ FN_SPEW ("dx: %d\n" , dev -> registration .reg_info .dx );
815+ FN_SPEW ("ay: %d\n" , dev -> registration .reg_info .ay );
816+ FN_SPEW ("by: %d\n" , dev -> registration .reg_info .by );
817+ FN_SPEW ("cy: %d\n" , dev -> registration .reg_info .cy );
818+ FN_SPEW ("dy: %d\n" , dev -> registration .reg_info .dy );
819+ FN_SPEW ("dx_start: %d\n" , dev -> registration .reg_info .dx_start );
820+ FN_SPEW ("dy_start: %d\n" , dev -> registration .reg_info .dy_start );
821+ FN_SPEW ("dx_beta_start: %d\n" , dev -> registration .reg_info .dx_beta_start );
822+ FN_SPEW ("dy_beta_start: %d\n" , dev -> registration .reg_info .dy_beta_start );
823+ FN_SPEW ("dx_beta_inc: %d\n" , dev -> registration .reg_info .dx_beta_inc );
824+ FN_SPEW ("dy_beta_inc: %d\n" , dev -> registration .reg_info .dy_beta_inc );
825+ FN_SPEW ("dxdx_start: %d\n" , dev -> registration .reg_info .dxdx_start );
826+ FN_SPEW ("dxdy_start: %d\n" , dev -> registration .reg_info .dxdy_start );
827+ FN_SPEW ("dydx_start: %d\n" , dev -> registration .reg_info .dydx_start );
828+ FN_SPEW ("dydy_start: %d\n" , dev -> registration .reg_info .dydy_start );
829+ FN_SPEW ("dxdxdx_start: %d\n" , dev -> registration .reg_info .dxdxdx_start );
830+ FN_SPEW ("dydxdx_start: %d\n" , dev -> registration .reg_info .dydxdx_start );
831+ FN_SPEW ("dxdxdy_start: %d\n" , dev -> registration .reg_info .dxdxdy_start );
832+ FN_SPEW ("dydxdy_start: %d\n" , dev -> registration .reg_info .dydxdy_start );
833+ FN_SPEW ("dydydx_start: %d\n" , dev -> registration .reg_info .dydydx_start );
834+ FN_SPEW ("dydydy_start: %d\n" , dev -> registration .reg_info .dydydy_start );
836835 /*
837836 // NOTE: Not assigned above
838837 FN_SPEW("dx_center: %d\n", dev_reg_info->dx_center);
@@ -861,10 +860,10 @@ static int freenect_fetch_reg_pad_info(freenect_device *dev)
861860 FN_ERROR ("freenect_fetch_reg_pad_info: send_cmd read %d bytes (expected 8)\n" , res );
862861 return -1 ;
863862 }
864- freenect_reg_pad_info * pad_info_ptr = ( freenect_reg_pad_info * )( & reply [ 2 ] );
865- dev -> registration .reg_pad_info .start_lines = fn_le16s (pad_info_ptr -> start_lines );
866- dev -> registration .reg_pad_info .end_lines = fn_le16s (pad_info_ptr -> end_lines );
867- dev -> registration .reg_pad_info .cropping_lines = fn_le16s (pad_info_ptr -> cropping_lines );
863+ memcpy ( & dev -> registration . reg_pad_info , reply + 2 , sizeof ( dev -> registration . reg_pad_info ) );
864+ dev -> registration .reg_pad_info .start_lines = fn_le16s (dev -> registration . reg_pad_info . start_lines );
865+ dev -> registration .reg_pad_info .end_lines = fn_le16s (dev -> registration . reg_pad_info . end_lines );
866+ dev -> registration .reg_pad_info .cropping_lines = fn_le16s (dev -> registration . reg_pad_info . cropping_lines );
868867 FN_SPEW ("start_lines: %u\n" ,dev -> registration .reg_pad_info .start_lines );
869868 FN_SPEW ("end_lines: %u\n" ,dev -> registration .reg_pad_info .end_lines );
870869 FN_SPEW ("cropping_lines: %u\n" ,dev -> registration .reg_pad_info .cropping_lines );
@@ -888,7 +887,9 @@ static int freenect_fetch_reg_const_shift(freenect_device *dev)
888887 FN_ERROR ("freenect_fetch_reg_const_shift: send_cmd read %d bytes (expected 8)\n" , res );
889888 return -1 ;
890889 }
891- uint16_t shift = fn_le16 (* ((uint16_t * )(reply + 2 )));
890+ uint16_t shift ;
891+ memcpy (& shift , reply + 2 , sizeof (shift ));
892+ shift = fn_le16 (shift );
892893 dev -> registration .const_shift = (double )shift ;
893894 FN_SPEW ("const_shift: %f\n" ,dev -> registration .const_shift );
894895 return 0 ;
@@ -907,17 +908,18 @@ static int freenect_fetch_zero_plane_info(freenect_device *dev)
907908 FN_ERROR ("freenect_fetch_zero_plane_info: send_cmd read %d bytes (expected 322)\n" , res );
908909 return -1 ;
909910 }
911+
912+ memcpy (& (dev -> registration .zero_plane_info ), reply + 94 , sizeof (dev -> registration .zero_plane_info ));
913+ dev -> registration .zero_plane_info .dcmos_emitter_dist = * ((float * )(& fn_le32 (* ((uint32_t * )(& dev -> registration .zero_plane_info .dcmos_emitter_dist )))));
914+ dev -> registration .zero_plane_info .dcmos_rcmos_dist = * ((float * )(& fn_le32 (* ((uint32_t * )(& dev -> registration .zero_plane_info .dcmos_rcmos_dist )))));
915+ dev -> registration .zero_plane_info .reference_distance = * ((float * )(& fn_le32 (* ((uint32_t * )(& dev -> registration .zero_plane_info .reference_distance )))));
916+ dev -> registration .zero_plane_info .reference_pixel_size = * ((float * )(& fn_le32 (* ((uint32_t * )(& dev -> registration .zero_plane_info .reference_pixel_size )))));
917+
910918 // WTF is all this data? it's way bigger than sizeof(XnFixedParams)...
911- FN_SPEW ("dcmos_emitter_distance: %f\n" , * ((float * )(reply + 94 )));
912- FN_SPEW ("dcmos_rcmos_distance: %f\n" , * ((float * )(reply + 98 )));
913- FN_SPEW ("reference_distance: %f\n" , * ((float * )(reply + 102 )));
914- FN_SPEW ("reference_pixel_size: %f\n" , * ((float * )(reply + 106 )));
915-
916- // The values are 32-bit floats in little-endian. So:
917- dev -> registration .zero_plane_info .dcmos_emitter_dist = * ((float * )(& fn_le32 (* ((uint32_t * )(reply + 94 )))));
918- dev -> registration .zero_plane_info .dcmos_rcmos_dist = * ((float * )(& fn_le32 (* ((uint32_t * )(reply + 98 )))));
919- dev -> registration .zero_plane_info .reference_distance = * ((float * )(& fn_le32 (* ((uint32_t * )(reply + 102 )))));
920- dev -> registration .zero_plane_info .reference_pixel_size = * ((float * )(& fn_le32 (* ((uint32_t * )(reply + 106 )))));
919+ FN_SPEW ("dcmos_emitter_distance: %f\n" , dev -> registration .zero_plane_info .dcmos_emitter_dist );
920+ FN_SPEW ("dcmos_rcmos_distance: %f\n" , dev -> registration .zero_plane_info .dcmos_rcmos_dist );
921+ FN_SPEW ("reference_distance: %f\n" , dev -> registration .zero_plane_info .reference_distance );
922+ FN_SPEW ("reference_pixel_size: %f\n" , dev -> registration .zero_plane_info .reference_pixel_size );
921923
922924 // FIXME: OpenNI seems to use a hardcoded value of 2.4 instead of 2.3 as reported by Kinect
923925 dev -> registration .zero_plane_info .dcmos_rcmos_dist = 2.4 ;
0 commit comments