Skip to content

Commit 24a6810

Browse files
committed
fakenect/record: Save the registration parameters
So that it will be possible to use fakenect recorded data with applications expecting _DEPTH_MM data the record tool now writes the registration parameters to a device.json file. Signed-off-by: Robert Bragg <[email protected]>
1 parent b0891b7 commit 24a6810

File tree

1 file changed

+69
-0
lines changed

1 file changed

+69
-0
lines changed

fakenect/record.c

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,9 @@
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+
204270
void 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

Comments
 (0)