Monado OpenXR Runtime
|
A fifo that also lets you dynamically filter. More...
Data Structures | |
struct | m_ff_vec3_f32 |
struct | m_ff_f64 |
Functions | |
static void | vec3_f32_init (struct m_ff_vec3_f32 *ff, size_t num) |
static void | vec3_f32_destroy (struct m_ff_vec3_f32 *ff) |
void | m_ff_vec3_f32_alloc (struct m_ff_vec3_f32 **ff_out, size_t num) |
Allocates a filter fifo tracking num samples and fills it with num samples at timepoint zero. More... | |
void | m_ff_vec3_f32_free (struct m_ff_vec3_f32 **ff_ptr) |
Frees the given filter fifo and all its samples. More... | |
size_t | m_ff_vec3_f32_get_num (struct m_ff_vec3_f32 *ff) |
Return the number of samples that can fill the fifo. More... | |
void | m_ff_vec3_f32_push (struct m_ff_vec3_f32 *ff, const struct xrt_vec3 *sample, uint64_t timestamp_ns) |
Pushes a sample at the given timepoint, pushing samples out of order yields unspecified behaviour, so samples must be pushed in time order. More... | |
bool | m_ff_vec3_f32_get (struct m_ff_vec3_f32 *ff, size_t num, struct xrt_vec3 *out_sample, uint64_t *out_timestamp_ns) |
Return the sample at the index, zero means the last sample push, one second last and so on. More... | |
size_t | m_ff_vec3_f32_filter (struct m_ff_vec3_f32 *ff, uint64_t start_ns, uint64_t stop_ns, struct xrt_vec3 *out_average) |
Averages all samples in the fifo between the two timepoints, returns number of samples sampled, if no samples was found between the timpoints returns 0 and sets out_average to all zeros. More... | |
static void | ff_f64_init (struct m_ff_f64 *ff, size_t num) |
static void | ff_f64_destroy (struct m_ff_f64 *ff) |
void | m_ff_f64_alloc (struct m_ff_f64 **ff_out, size_t num) |
Allocates a filter fifo tracking num samples and fills it with num samples at timepoint zero. More... | |
void | m_ff_f64_free (struct m_ff_f64 **ff_ptr) |
Frees the given filter fifo and all its samples. More... | |
size_t | m_ff_f64_get_num (struct m_ff_f64 *ff) |
Return the number of samples that can fill the fifo. More... | |
void | m_ff_f64_push (struct m_ff_f64 *ff, const double *sample, uint64_t timestamp_ns) |
Pushes a sample at the given timepoint, pushing samples out of order yields unspecified behaviour, so samples must be pushed in time order. More... | |
bool | m_ff_f64_get (struct m_ff_f64 *ff, size_t num, double *out_sample, uint64_t *out_timestamp_ns) |
Return the sample at the index, 0 means the last sample push, 1 second-to-last, etc. More... | |
size_t | m_ff_f64_filter (struct m_ff_f64 *ff, uint64_t start_ns, uint64_t stop_ns, double *out_average) |
Averages all samples in the fifo between the two timepoints, returns number of samples sampled, if no samples was found between the timpoints returns 0 and sets out_average to all zeros. More... | |
A fifo that also lets you dynamically filter.
Allocates a filter fifo tracking num
samples and fills it with num
samples at timepoint zero.
References U_TYPED_CALLOC.
size_t m_ff_f64_filter | ( | struct m_ff_f64 * | ff, |
uint64_t | start_ns, | ||
uint64_t | stop_ns, | ||
double * | out_average | ||
) |
Averages all samples in the fifo between the two timepoints, returns number of samples sampled, if no samples was found between the timpoints returns 0 and sets out_average
to all zeros.
ff | Filter fifo to search in. |
start_ns | Timepoint furthest in the past, to start searching for samples. |
stop_ns | Timepoint closest in the past, or now, to stop searching for samples. |
out_average | Average of all samples in the given timeframe. |
void m_ff_f64_free | ( | struct m_ff_f64 ** | ff_ptr | ) |
Frees the given filter fifo and all its samples.
bool m_ff_f64_get | ( | struct m_ff_f64 * | ff, |
size_t | num, | ||
double * | out_sample, | ||
uint64_t * | out_timestamp_ns | ||
) |
Return the sample at the index, 0 means the last sample push, 1 second-to-last, etc.
Return the number of samples that can fill the fifo.
void m_ff_f64_push | ( | struct m_ff_f64 * | ff, |
const double * | sample, | ||
uint64_t | timestamp_ns | ||
) |
Pushes a sample at the given timepoint, pushing samples out of order yields unspecified behaviour, so samples must be pushed in time order.
void m_ff_vec3_f32_alloc | ( | struct m_ff_vec3_f32 ** | ff_out, |
size_t | num | ||
) |
Allocates a filter fifo tracking num
samples and fills it with num
samples at timepoint zero.
References U_TYPED_CALLOC.
size_t m_ff_vec3_f32_filter | ( | struct m_ff_vec3_f32 * | ff, |
uint64_t | start_ns, | ||
uint64_t | stop_ns, | ||
struct xrt_vec3 * | out_average | ||
) |
Averages all samples in the fifo between the two timepoints, returns number of samples sampled, if no samples was found between the timpoints returns 0 and sets out_average
to all zeros.
ff | Filter fifo to search in. |
start_ns | Timepoint furthest in the past, to start searching for samples. |
stop_ns | Timepoint closest in the past, or now, to stop searching for samples. |
out_average | Average of all samples in the given timeframe. |
void m_ff_vec3_f32_free | ( | struct m_ff_vec3_f32 ** | ff_ptr | ) |
Frees the given filter fifo and all its samples.
bool m_ff_vec3_f32_get | ( | struct m_ff_vec3_f32 * | ff, |
size_t | num, | ||
struct xrt_vec3 * | out_sample, | ||
uint64_t * | out_timestamp_ns | ||
) |
Return the sample at the index, zero means the last sample push, one second last and so on.
Referenced by xrt::auxiliary::tracking::slam::predict_pose_from_imu().
size_t m_ff_vec3_f32_get_num | ( | struct m_ff_vec3_f32 * | ff | ) |
Return the number of samples that can fill the fifo.
void m_ff_vec3_f32_push | ( | struct m_ff_vec3_f32 * | ff, |
const struct xrt_vec3 * | sample, | ||
uint64_t | timestamp_ns | ||
) |
Pushes a sample at the given timepoint, pushing samples out of order yields unspecified behaviour, so samples must be pushed in time order.