@@ -79,6 +79,10 @@ static freenect_frame_mode depth_11_mode =
79
79
{MAKE_RESERVED (FREENECT_RESOLUTION_MEDIUM , FREENECT_DEPTH_11BIT ),
80
80
FREENECT_RESOLUTION_MEDIUM , {FREENECT_DEPTH_11BIT },
81
81
640 * 480 * 2 , 640 , 480 , 11 , 5 , 30 , 1 };
82
+ static freenect_frame_mode depth_registered_mode =
83
+ {MAKE_RESERVED (FREENECT_RESOLUTION_MEDIUM , FREENECT_DEPTH_REGISTERED ),
84
+ FREENECT_RESOLUTION_MEDIUM , {FREENECT_DEPTH_REGISTERED },
85
+ 640 * 480 * 2 , 640 , 480 , 16 , 0 , 30 , 1 };
82
86
static freenect_frame_mode depth_mm_mode =
83
87
{MAKE_RESERVED (FREENECT_RESOLUTION_MEDIUM , FREENECT_DEPTH_MM ),
84
88
FREENECT_RESOLUTION_MEDIUM , {FREENECT_DEPTH_MM },
@@ -246,6 +250,9 @@ int freenect_process_events(freenect_context *ctx)
246
250
case FREENECT_DEPTH_11BIT :
247
251
memcpy (depth_buffer , cur_depth , mode .bytes );
248
252
break ;
253
+ case FREENECT_DEPTH_REGISTERED :
254
+ freenect_apply_registration (fake_dev , cur_depth , depth_buffer , true);
255
+ break ;
249
256
case FREENECT_DEPTH_MM :
250
257
freenect_apply_depth_unpacked_to_mm (fake_dev , cur_depth , depth_buffer );
251
258
break ;
@@ -353,7 +360,8 @@ int freenect_set_depth_mode(freenect_device* dev, const freenect_frame_mode mode
353
360
// underlying data. Would be better to check for conflict.
354
361
depth_mode = mode ;
355
362
356
- if (mode .depth_format == FREENECT_DEPTH_MM &&
363
+ if ((mode .depth_format == FREENECT_DEPTH_MM ||
364
+ mode .depth_format == FREENECT_DEPTH_REGISTERED ) &&
357
365
dev -> registration .zero_plane_info .reference_distance == 0 ) {
358
366
printf ("Warning: older fakenect recording doesn't contain "
359
367
"registration info for mapping depth to MM units\n" );
@@ -407,6 +415,8 @@ freenect_frame_mode freenect_find_depth_mode(freenect_resolution res, freenect_d
407
415
switch (fmt ) {
408
416
case FREENECT_DEPTH_11BIT :
409
417
return depth_11_mode ;
418
+ case FREENECT_DEPTH_REGISTERED :
419
+ return depth_registered_mode ;
410
420
case FREENECT_DEPTH_MM :
411
421
return depth_mm_mode ;
412
422
default :
@@ -420,7 +430,7 @@ freenect_frame_mode freenect_find_depth_mode(freenect_resolution res, freenect_d
420
430
421
431
int freenect_get_depth_mode_count ()
422
432
{
423
- return 1 ;
433
+ return 3 ;
424
434
}
425
435
426
436
freenect_frame_mode freenect_get_depth_mode (int mode_num )
@@ -429,6 +439,8 @@ freenect_frame_mode freenect_get_depth_mode(int mode_num)
429
439
return depth_11_mode ;
430
440
else if (mode_num == 1 )
431
441
return depth_mm_mode ;
442
+ else if (mode_num == 2 )
443
+ return depth_registered_mode ;
432
444
else {
433
445
freenect_frame_mode invalid = { 0 };
434
446
return invalid ;
0 commit comments