@@ -76,6 +76,10 @@ static freenect_frame_mode depth_11_mode =
7676 {MAKE_RESERVED (FREENECT_RESOLUTION_MEDIUM , FREENECT_DEPTH_11BIT ),
7777 FREENECT_RESOLUTION_MEDIUM , {FREENECT_DEPTH_11BIT },
7878 640 * 480 * 2 , 640 , 480 , 11 , 5 , 30 , 1 };
79+ static freenect_frame_mode depth_registered_mode =
80+ {MAKE_RESERVED (FREENECT_RESOLUTION_MEDIUM , FREENECT_DEPTH_REGISTERED ),
81+ FREENECT_RESOLUTION_MEDIUM , {FREENECT_DEPTH_REGISTERED },
82+ 640 * 480 * 2 , 640 , 480 , 16 , 0 , 30 , 1 };
7983static freenect_frame_mode depth_mm_mode =
8084 {MAKE_RESERVED (FREENECT_RESOLUTION_MEDIUM , FREENECT_DEPTH_MM ),
8185 FREENECT_RESOLUTION_MEDIUM , {FREENECT_DEPTH_MM },
@@ -230,6 +234,9 @@ int freenect_process_events(freenect_context *ctx)
230234 case FREENECT_DEPTH_11BIT :
231235 memcpy (depth_buffer , cur_depth , mode .bytes );
232236 break ;
237+ case FREENECT_DEPTH_REGISTERED :
238+ freenect_apply_registration (fake_dev , cur_depth , depth_buffer , true);
239+ break ;
233240 case FREENECT_DEPTH_MM :
234241 freenect_apply_depth_unpacked_to_mm (fake_dev , cur_depth , depth_buffer );
235242 break ;
@@ -337,7 +344,8 @@ int freenect_set_depth_mode(freenect_device* dev, const freenect_frame_mode mode
337344 // underlying data. Would be better to check for conflict.
338345 depth_mode = mode ;
339346
340- if (mode .depth_format == FREENECT_DEPTH_MM &&
347+ if ((mode .depth_format == FREENECT_DEPTH_MM ||
348+ mode .depth_format == FREENECT_DEPTH_REGISTERED ) &&
341349 dev -> registration .zero_plane_info .reference_distance == 0 ) {
342350 printf ("Warning: older fakenect recording doesn't contain "
343351 "registration info for mapping depth to MM units\n" );
@@ -391,6 +399,8 @@ freenect_frame_mode freenect_find_depth_mode(freenect_resolution res, freenect_d
391399 switch (fmt ) {
392400 case FREENECT_DEPTH_11BIT :
393401 return depth_11_mode ;
402+ case FREENECT_DEPTH_REGISTERED :
403+ return depth_registered_mode ;
394404 case FREENECT_DEPTH_MM :
395405 return depth_mm_mode ;
396406 default :
@@ -404,7 +414,7 @@ freenect_frame_mode freenect_find_depth_mode(freenect_resolution res, freenect_d
404414
405415int freenect_get_depth_mode_count ()
406416{
407- return 1 ;
417+ return 2 ;
408418}
409419
410420freenect_frame_mode freenect_get_depth_mode (int mode_num )
@@ -413,6 +423,8 @@ freenect_frame_mode freenect_get_depth_mode(int mode_num)
413423 return depth_11_mode ;
414424 else if (mode_num == 1 )
415425 return depth_mm_mode ;
426+ else if (mode_num == 2 )
427+ return depth_registered_mode ;
416428 else {
417429 freenect_frame_mode invalid = { 0 };
418430 return invalid ;
0 commit comments