File RateConverter_core.h¶
File List > inc > RateConverter > RateConverter_core.h
Go to the documentation of this file
#ifndef RATE_CONVERTER_CORE_H
#define RATE_CONVERTER_CORE_H
#include "clib_common.h"
#include "dp_state.h"
#include <complex.h>
#include <stddef.h>
#include "resamp/resamp_core.h"
#include "fir/fir_core.h"
#ifdef __cplusplus
extern "C"
{
#endif
#define RC_MAX_STAGES 3
typedef enum
{
RC_STAGE_HB = 0,
RC_STAGE_CIC = 1,
RC_STAGE_RESAMP = 2,
} rc_stage_t;
typedef struct
{
double rate;
int compensate;
int n_stages;
rc_stage_t stage_types[RC_MAX_STAGES];
void *stage_ptrs[RC_MAX_STAGES];
float _Complex *bufs[2];
size_t buf_cap;
} RateConverter_state_t;
RateConverter_state_t *RateConverter_create (double rate, int compensate);
void RateConverter_destroy (RateConverter_state_t *s);
void RateConverter_reset (RateConverter_state_t *s);
/* Serializable state (standard bytes interface; see dp_state.h): the standard
* envelope followed by the concatenated mutable state of the active cascade
* stages (HB / CIC[+comp FIR] / Resampler), in cascade order — each a
* self-contained sub-blob with its own leaf envelope. The stage plan is config
* (rebuilt from rate), so a same-rate RateConverter round-trips exactly. */
#define RC_STATE_MAGIC DP_FOURCC ('R', 'C', 'V', 'T')
#define RC_STATE_VERSION 1u
size_t RateConverter_state_bytes (const RateConverter_state_t *s);
void RateConverter_get_state (const RateConverter_state_t *s, void *blob);
int RateConverter_set_state (RateConverter_state_t *s, const void *blob);
size_t RateConverter_execute (RateConverter_state_t *s,
const float _Complex *in, size_t n_in,
float _Complex *out, size_t max_out);
size_t RateConverter_execute_max_out (RateConverter_state_t *s);
double RateConverter_get_rate (const RateConverter_state_t *s);
void RateConverter_set_rate (RateConverter_state_t *s, double rate);
int RateConverter_stage_label (RateConverter_state_t *s, int i,
char *buf, size_t len);
size_t RateConverter_convert (double rate, int compensate,
const float _Complex *in, size_t n_in,
float _Complex *out, size_t max_out);
#ifdef __cplusplus
}
#endif
#endif /* RATE_CONVERTER_CORE_H */