C Sync Wrapper
The freenect driver provides an "asynchronous" interface where you provide callbacks and it calls them when sensor data is available. There is another way of thinking about the data by having a "synchronous" interface where you call a function to get an image "freenect_sync_get_depth" or "freenect_sync_get_rgb" and it blocks and gives you back the data.
This is implemented by using a thread to handle the callbacks and a buffer to provide an interface for the client. You are guaranteed to get the buffers in order by timestamp (e.g., you won't get something older than your last). You may not get all frames with this interface (e.g., there may be gaps); however, a 'best effort' is made.
Who is involved
Search for Synchronous in People
#define RGB_BYTES 921600 // 480 * 640 * 3
int freenect_sync_get_rgb(char **rgb, uint32_t *timestamp);
Synchronous rgb function, starts the runloop if it isn't running Args: rgb: Populated with a pointer to a RGB buffer (of size RGB_BYTES) that you need to free timestamp: Populated with a pointer to the associated timestamp Returns: Nonzero on error.
#define DEPTH_BYTES 614400 // 480 * 640 * 2
int freenect_sync_get_depth(char **depth, uint32_t *timestamp);
Synchronous depth function, starts the runloop if it isn't running Args: depth: Populated with a pointer to a depth buffer (of size DEPTH_BYTES) that you need to free timestamp: Populated with a pointer to the associated timestamp Returns: Nonzero on error.
Here is a very short example using the c_sync wrappers and opencv.