@@ -79,6 +79,10 @@ static freenect_frame_mode depth_11_mode =
7979 {MAKE_RESERVED (FREENECT_RESOLUTION_MEDIUM , FREENECT_DEPTH_11BIT ),
8080 FREENECT_RESOLUTION_MEDIUM , {FREENECT_DEPTH_11BIT },
8181 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 };
8286static freenect_frame_mode depth_mm_mode =
8387 {MAKE_RESERVED (FREENECT_RESOLUTION_MEDIUM , FREENECT_DEPTH_MM ),
8488 FREENECT_RESOLUTION_MEDIUM , {FREENECT_DEPTH_MM },
@@ -246,6 +250,9 @@ int freenect_process_events(freenect_context *ctx)
246250 case FREENECT_DEPTH_11BIT :
247251 memcpy (depth_buffer , cur_depth , mode .bytes );
248252 break ;
253+ case FREENECT_DEPTH_REGISTERED :
254+ freenect_apply_registration (fake_dev , cur_depth , depth_buffer , true);
255+ break ;
249256 case FREENECT_DEPTH_MM :
250257 freenect_apply_depth_unpacked_to_mm (fake_dev , cur_depth , depth_buffer );
251258 break ;
@@ -353,7 +360,8 @@ int freenect_set_depth_mode(freenect_device* dev, const freenect_frame_mode mode
353360 // underlying data. Would be better to check for conflict.
354361 depth_mode = mode ;
355362
356- if (mode .depth_format == FREENECT_DEPTH_MM &&
363+ if ((mode .depth_format == FREENECT_DEPTH_MM ||
364+ mode .depth_format == FREENECT_DEPTH_REGISTERED ) &&
357365 dev -> registration .zero_plane_info .reference_distance == 0 ) {
358366 printf ("Warning: older fakenect recording doesn't contain "
359367 "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
407415 switch (fmt ) {
408416 case FREENECT_DEPTH_11BIT :
409417 return depth_11_mode ;
418+ case FREENECT_DEPTH_REGISTERED :
419+ return depth_registered_mode ;
410420 case FREENECT_DEPTH_MM :
411421 return depth_mm_mode ;
412422 default :
@@ -420,7 +430,7 @@ freenect_frame_mode freenect_find_depth_mode(freenect_resolution res, freenect_d
420430
421431int freenect_get_depth_mode_count ()
422432{
423- return 1 ;
433+ return 3 ;
424434}
425435
426436freenect_frame_mode freenect_get_depth_mode (int mode_num )
@@ -429,6 +439,8 @@ freenect_frame_mode freenect_get_depth_mode(int mode_num)
429439 return depth_11_mode ;
430440 else if (mode_num == 1 )
431441 return depth_mm_mode ;
442+ else if (mode_num == 2 )
443+ return depth_registered_mode ;
432444 else {
433445 freenect_frame_mode invalid = { 0 };
434446 return invalid ;
0 commit comments