Monado OpenXR Runtime
Data Structures | Functions
m_filter_fifo.c File Reference

A fifo that also allows you to dynamically filter. More...

#include "util/u_misc.h"
#include "math/m_filter_fifo.h"
#include <assert.h>
Include dependency graph for m_filter_fifo.c:

Data Structures

struct  m_ff_vec3_f32
 

Functions

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 it's samples. 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...
 
void 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...
 

Detailed Description

A fifo that also allows you to dynamically filter.

Author
Jakob Bornecrantz jakob.nosp@m.@col.nosp@m.labor.nosp@m.a.co.nosp@m.m

Function Documentation

◆ m_ff_vec3_f32_alloc()

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.

Referenced by m_imu_3dof_init().

◆ m_ff_vec3_f32_filter()

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.

Parameters
ffFilter fifo to search in.
start_nsTimepoint furthest in the past, to start searching for samples.
stop_nsTimepoint closest in the past, or now, to stop searching for samples.
out_averageAverage of all samples in the given timeframe.

References m_ff_vec3_f32::latest, m_ff_vec3_f32::num, m_ff_vec3_f32::samples, m_ff_vec3_f32::timestamps_ns, xrt_vec3::x, xrt_vec3::y, and xrt_vec3::z.

◆ m_ff_vec3_f32_free()

void m_ff_vec3_f32_free ( struct m_ff_vec3_f32 **  ff_ptr)

Frees the given filter fifo and all it's samples.

Referenced by m_imu_3dof_close().

◆ m_ff_vec3_f32_get()

void 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.

References m_ff_vec3_f32::latest, m_ff_vec3_f32::num, m_ff_vec3_f32::samples, and m_ff_vec3_f32::timestamps_ns.

◆ m_ff_vec3_f32_push()

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.

References m_ff_vec3_f32::latest, m_ff_vec3_f32::num, sample, m_ff_vec3_f32::samples, and m_ff_vec3_f32::timestamps_ns.

Referenced by m_imu_3dof_update().