@@ -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