2424 */
2525
2626#include "libfreenect.h"
27+ #include "freenect_internal.h"
2728#include "platform.h"
29+ #include "parson.h"
2830#include <sys/stat.h>
2931#include <sys/types.h>
3032#include <stdio.h>
@@ -201,6 +203,70 @@ void print_mode(const char *name, freenect_frame_mode mode) {
201203 mode .framerate , mode .is_valid );
202204}
203205
206+ static void write_device_info (freenect_device * dev )
207+ {
208+ JSON_Value * js = json_value_init_object ();
209+ JSON_Object * dev_js = json_object (js );
210+
211+ JSON_Value * reg_info_val = json_value_init_object ();
212+ JSON_Object * reg_info = json_object (reg_info_val );
213+
214+ json_object_set_value (dev_js , "reg_info" , reg_info_val );
215+
216+ json_object_set_number (reg_info , "ax" , dev -> registration .reg_info .ax );
217+ json_object_set_number (reg_info , "bx" , dev -> registration .reg_info .bx );
218+ json_object_set_number (reg_info , "cx" , dev -> registration .reg_info .cx );
219+ json_object_set_number (reg_info , "dx" , dev -> registration .reg_info .dx );
220+ json_object_set_number (reg_info , "ay" , dev -> registration .reg_info .ay );
221+ json_object_set_number (reg_info , "by" , dev -> registration .reg_info .by );
222+ json_object_set_number (reg_info , "cy" , dev -> registration .reg_info .cy );
223+ json_object_set_number (reg_info , "dy" , dev -> registration .reg_info .dy );
224+ json_object_set_number (reg_info , "dx_start" , dev -> registration .reg_info .dx_start );
225+ json_object_set_number (reg_info , "dy_start" , dev -> registration .reg_info .dy_start );
226+ json_object_set_number (reg_info , "dx_beta_start" , dev -> registration .reg_info .dx_beta_start );
227+ json_object_set_number (reg_info , "dy_beta_start" , dev -> registration .reg_info .dy_beta_start );
228+ json_object_set_number (reg_info , "dx_beta_inc" , dev -> registration .reg_info .dx_beta_inc );
229+ json_object_set_number (reg_info , "dy_beta_inc" , dev -> registration .reg_info .dy_beta_inc );
230+ json_object_set_number (reg_info , "dxdx_start" , dev -> registration .reg_info .dxdx_start );
231+ json_object_set_number (reg_info , "dxdy_start" , dev -> registration .reg_info .dxdy_start );
232+ json_object_set_number (reg_info , "dydx_start" , dev -> registration .reg_info .dydx_start );
233+ json_object_set_number (reg_info , "dydy_start" , dev -> registration .reg_info .dydy_start );
234+ json_object_set_number (reg_info , "dxdxdx_start" , dev -> registration .reg_info .dxdxdx_start );
235+ json_object_set_number (reg_info , "dydxdx_start" , dev -> registration .reg_info .dydxdx_start );
236+ json_object_set_number (reg_info , "dxdxdy_start" , dev -> registration .reg_info .dxdxdy_start );
237+ json_object_set_number (reg_info , "dydxdy_start" , dev -> registration .reg_info .dydxdy_start );
238+ json_object_set_number (reg_info , "dydydx_start" , dev -> registration .reg_info .dydydx_start );
239+ json_object_set_number (reg_info , "dydydy_start" , dev -> registration .reg_info .dydydy_start );
240+
241+ JSON_Value * pad_info_val = json_value_init_object ();
242+ JSON_Object * pad_info = json_object (pad_info_val );
243+
244+ json_object_set_value (reg_info , "pad_info" , pad_info_val );
245+
246+ json_object_set_number (pad_info , "start_lines" , dev -> registration .reg_pad_info .start_lines );
247+ json_object_set_number (pad_info , "end_lines" , dev -> registration .reg_pad_info .end_lines );
248+ json_object_set_number (pad_info , "cropping_lines" , dev -> registration .reg_pad_info .cropping_lines );
249+
250+ JSON_Value * zp_info_val = json_value_init_object ();
251+ JSON_Object * zp_info = json_object (zp_info_val );
252+
253+ json_object_set_value (reg_info , "zero_plane_info" , zp_info_val );
254+
255+ json_object_set_number (zp_info , "dcmos_emitter_distance" , dev -> registration .zero_plane_info .dcmos_emitter_dist );
256+ json_object_set_number (zp_info , "dcmos_rcmos_distance" , dev -> registration .zero_plane_info .dcmos_rcmos_dist );
257+ json_object_set_number (zp_info , "reference_distance" , dev -> registration .zero_plane_info .reference_distance );
258+ json_object_set_number (zp_info , "reference_pixel_size" , dev -> registration .zero_plane_info .reference_pixel_size );
259+
260+ json_object_set_number (dev_js , "const_shift" , dev -> registration .const_shift );
261+
262+ char fn [512 ];
263+ snprintf (fn , sizeof (fn ), "%s/device.json" , out_dir );
264+
265+ json_serialize_to_file_pretty (js , fn );
266+
267+ json_value_free (js );
268+ }
269+
204270void init ()
205271{
206272 freenect_context * ctx ;
@@ -223,6 +289,9 @@ void init()
223289 freenect_start_depth (dev );
224290 freenect_set_video_mode (dev , freenect_find_video_mode (FREENECT_RESOLUTION_MEDIUM , FREENECT_VIDEO_RGB ));
225291 freenect_start_video (dev );
292+
293+ write_device_info (dev );
294+
226295 if (use_ffmpeg ) {
227296 init_ffmpeg_streams ();
228297 freenect_set_depth_callback (dev , depth_cb_ffmpeg );
0 commit comments