@@ -910,15 +910,25 @@ static int freenect_fetch_zero_plane_info(freenect_device *dev)
910910 }
911911
912912 memcpy (& (dev -> registration .zero_plane_info ), reply + 94 , sizeof (dev -> registration .zero_plane_info ));
913- uint32_t temp ;
914- temp = fn_le32 (* ((uint32_t * )(& dev -> registration .zero_plane_info .dcmos_emitter_dist )));
915- dev -> registration .zero_plane_info .dcmos_emitter_dist = * ((float * )(& temp ));
916- temp = fn_le32 (* ((uint32_t * )(& dev -> registration .zero_plane_info .dcmos_rcmos_dist )));
917- dev -> registration .zero_plane_info .dcmos_rcmos_dist = * ((float * )(& temp ));
918- temp = fn_le32 (* ((uint32_t * )(& dev -> registration .zero_plane_info .reference_distance )));
919- dev -> registration .zero_plane_info .reference_distance = * ((float * )(& temp ));
920- temp = fn_le32 (* ((uint32_t * )(& dev -> registration .zero_plane_info .reference_pixel_size )));
921- dev -> registration .zero_plane_info .reference_pixel_size = * ((float * )(& temp ));
913+ union {
914+ uint32_t ui ;
915+ float f ;
916+ } conversion_union ;
917+ conversion_union .f = dev -> registration .zero_plane_info .dcmos_emitter_dist ;
918+ conversion_union .ui = fn_le32 (conversion_union .ui );
919+ dev -> registration .zero_plane_info .dcmos_emitter_dist = conversion_union .f ;
920+
921+ conversion_union .f = dev -> registration .zero_plane_info .dcmos_rcmos_dist ;
922+ conversion_union .ui = fn_le32 (conversion_union .ui );
923+ dev -> registration .zero_plane_info .dcmos_rcmos_dist = conversion_union .f ;
924+
925+ conversion_union .f = dev -> registration .zero_plane_info .reference_distance ;
926+ conversion_union .ui = fn_le32 (conversion_union .ui );
927+ dev -> registration .zero_plane_info .reference_distance = conversion_union .f ;
928+
929+ conversion_union .f = dev -> registration .zero_plane_info .reference_pixel_size ;
930+ conversion_union .ui = fn_le32 (conversion_union .ui );
931+ dev -> registration .zero_plane_info .reference_pixel_size = conversion_union .f ;
922932
923933 // WTF is all this data? it's way bigger than sizeof(XnFixedParams)...
924934 FN_SPEW ("dcmos_emitter_distance: %f\n" , dev -> registration .zero_plane_info .dcmos_emitter_dist );
0 commit comments