Notice: MediaWiki has been updated. Report any rough edges to marcan@marcan.st
C Sync Wrapper: Difference between revisions
Line 18: | Line 18: | ||
Args: | Args: | ||
video: Populated with a pointer to a video buffer with a size of the requested type | |||
timestamp: Populated with a pointer to the associated timestamp | timestamp: Populated with a pointer to the associated timestamp | ||
index: Device index (0 is the first) | index: Device index (0 is the first) |
Revision as of 05:50, 2 December 2010
About
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
However (Brandyn) and (amiller) are trying to organize things for the Synchronous interface.
Interface
int freenect_sync_get_video(void **video, uint32_t *timestamp, int index, freenect_video_format fmt);
Synchronous video function, starts the runloop if it isn't running The returned buffer is valid until this function is called again, after which the buffer must not be used again. Make a copy if the data is required. Args: video: Populated with a pointer to a video buffer with a size of the requested type timestamp: Populated with a pointer to the associated timestamp index: Device index (0 is the first) fmt: Valid format Returns: Nonzero on error.
int freenect_sync_get_depth(void **depth, uint32_t *timestamp, int index, freenect_depth_format fmt);
Synchronous depth function, starts the runloop if it isn't running The returned buffer is valid until this function is called again, after which the buffer must not be used again. Make a copy if the data is required. Args: depth: Populated with a pointer to a depth buffer with a size of the requested type timestamp: Populated with a pointer to the associated timestamp index: Device index (0 is the first) fmt: Valid format Returns: Nonzero on error.
Example
Here is a very short example using the c_sync wrappers and opencv.
Performance
TODO