31 uint8_t type, uint8_t reg,
double value) {
38 uint8_t reg,
double value) {
44 uint8_t reg,
double value) {
50 uint8_t reg,
double value) {
56 uint8_t reg,
double value) {
62 uint8_t reg,
double value) {
87 uint8_t type,
double duration) {
99 double duration, uint8_t slopes) {
113 const uint8_t* framebuffer,
114 const char* fsk_id) {
128 const void* event_cb_ctx, uint32_t sample_rate) {
153 uint8_t state, _Bool notify) {
154 if (seq->
state != state) {
171 const uint64_t old_scale
173 const uint64_t new_scale
175 double scale = (double)new_scale / (
double)old_scale;
178 seq->
regs[reg] *= scale;
199 switch (step->
type) {
329 switch (step->
type) {
374 switch (seq->
state) {
390 switch (seq->
state) {
454 double* buffer,
size_t buffer_sz) {
455 size_t written_sz = 0;
#define SSTVENC_CW_MOD_STATE_DONE
void sstvenc_cw_compute(struct sstvenc_cw_mod *const cw)
void sstvenc_cw_init(struct sstvenc_cw_mod *const cw, const char *text, double amplitude, double frequency, double dit_period, double slope_period, uint32_t sample_rate, uint8_t time_unit)
void sstvenc_osc_init(struct sstvenc_oscillator *const osc, double amplitude, double frequency, double offset, uint32_t sample_rate)
void sstvenc_osc_set_frequency(struct sstvenc_oscillator *const osc, double frequency)
void sstvenc_osc_compute(struct sstvenc_oscillator *const osc)
#define SSTVENC_PS_PHASE_DONE
void sstvenc_ps_advance(struct sstvenc_pulseshape *const ps)
void sstvenc_ps_compute(struct sstvenc_pulseshape *const ps)
void sstvenc_ps_init(struct sstvenc_pulseshape *const ps, double amplitude, double rise_time, double hold_time, double fall_time, uint32_t sample_rate, uint8_t time_unit)
#define SSTVENC_SEQ_REG_PULSE_FALL
#define SSTVENC_SEQ_REG_DIT_PERIOD
#define SSTVENC_SEQ_NUM_REGS
#define SSTVENC_SEQ_REG_FREQUENCY
#define SSTVENC_SEQ_REG_PHASE
#define SSTVENC_SEQ_REG_AMPLITUDE
#define SSTVENC_SEQ_REG_PULSE_RISE
#define SSTVENC_SEQ_STATE_GEN_SILENCE
#define SSTVENC_SEQ_STATE_END_CW
#define SSTVENC_SEQ_STATE_BEGIN_SILENCE
#define SSTVENC_SEQ_STATE_GEN_IMAGE
#define SSTVENC_SEQ_STATE_INIT
#define SSTVENC_SEQ_STATE_END_IMAGE
#define SSTVENC_SEQ_STATE_BEGIN_CW
#define SSTVENC_SEQ_STATE_END_SILENCE
#define SSTVENC_SEQ_STATE_DONE
#define SSTVENC_SEQ_STATE_BEGIN_TONE
#define SSTVENC_SEQ_STATE_END_TONE
#define SSTVENC_SEQ_STATE_GEN_INF_SILENCE
#define SSTVENC_SEQ_STATE_GEN_INF_TONE
#define SSTVENC_SEQ_STATE_GEN_CW
#define SSTVENC_SEQ_STATE_BEGIN_IMAGE
#define SSTVENC_SEQ_STATE_GEN_TONE
#define SSTVENC_SEQ_STEP_TYPE_DIV_REGISTER
#define SSTVENC_SEQ_STEP_TYPE_EMIT_IMAGE
#define SSTVENC_SEQ_STEP_TYPE_SET_REGISTER
#define SSTVENC_SEQ_STEP_TYPE_DEC_REGISTER
#define SSTVENC_SEQ_STEP_TYPE_END
#define SSTVENC_SEQ_STEP_TYPE_IDEC_REGISTER
#define SSTVENC_SEQ_STEP_TYPE_SET_TS_UNIT
#define SSTVENC_SEQ_STEP_TYPE_INC_REGISTER
#define SSTVENC_SEQ_STEP_TYPE_MUL_REGISTER
#define SSTVENC_SEQ_STEP_TYPE_IDIV_REGISTER
#define SSTVENC_SEQ_STEP_TYPE_EMIT_SILENCE
#define SSTVENC_SEQ_STEP_TYPE_EMIT_TONE
#define SSTVENC_SEQ_STEP_TYPE_EMIT_CW
#define SSTVENC_SEQ_SLOPE_RISING
#define SSTVENC_SEQ_SLOPE_FALLING
sstvenc_sequencer_event_cb * event_cb
void sstvenc_sequencer_event_cb(struct sstvenc_sequencer *const enc)
static void sstvenc_sequencer_step_update_reg(struct sstvenc_sequencer_step *const step, uint8_t type, uint8_t reg, double value)
void sstvenc_sequencer_step_dec_reg(struct sstvenc_sequencer_step *const step, uint8_t reg, double value)
void sstvenc_sequencer_step_mul_reg(struct sstvenc_sequencer_step *const step, uint8_t reg, double value)
const void * event_cb_ctx
void sstvenc_sequencer_step_tone(struct sstvenc_sequencer_step *const step, double duration, uint8_t slopes)
static void sstvenc_sequencer_begin_image(struct sstvenc_sequencer *const seq, const struct sstvenc_sequencer_step *const step)
struct sstvenc_sequencer_step::sstvenc_sequence_step_args::sstvenc_sequence_step_duration duration
const uint8_t * framebuffer
struct sstvenc_sequencer_step::sstvenc_sequence_step_args::sstvenc_sequence_step_set_reg reg
union sstvenc_sequencer::sstvenc_sequencer_vars vars
void sstvenc_sequencer_step_inc_reg(struct sstvenc_sequencer_step *const step, uint8_t reg, double value)
struct sstvenc_sequencer::sstvenc_sequencer_vars::sstvenc_sequencer_vars_silence silence
const struct sstvenc_mode * mode
void sstvenc_sequencer_step_div_reg(struct sstvenc_sequencer_step *const step, uint8_t reg, double value)
void sstvenc_sequencer_step_set_reg(struct sstvenc_sequencer_step *const step, uint8_t reg, double value)
void sstvenc_sequencer_step_end(struct sstvenc_sequencer_step *const step)
static void sstvenc_sequencer_step_duration(struct sstvenc_sequencer_step *const step, uint8_t type, double duration)
union sstvenc_sequencer_step::sstvenc_sequence_step_args args
struct sstvenc_sequencer_step::sstvenc_sequence_step_args::sstvenc_sequence_step_cw cw
void sstvenc_sequencer_step_idiv_reg(struct sstvenc_sequencer_step *const step, uint8_t reg, double value)
static void sstvenc_sequencer_next_state(struct sstvenc_sequencer *const seq, uint8_t state, _Bool notify)
struct sstvenc_pulseshape ps
void sstvenc_sequencer_step_image(struct sstvenc_sequencer_step *const step, const struct sstvenc_mode *const mode, const uint8_t *framebuffer, const char *fsk_id)
static void sstvenc_sequencer_begin_cw(struct sstvenc_sequencer *const seq, const struct sstvenc_sequencer_step *const step)
static void sstvenc_sequencer_end(struct sstvenc_sequencer *const seq)
const struct sstvenc_sequencer_step * steps
struct sstvenc_sequencer::sstvenc_sequencer_vars::sstvenc_sequencer_vars_tone tone
void sstvenc_sequencer_step_cw(struct sstvenc_sequencer_step *const step, const char *text)
struct sstvenc_sequencer_step::sstvenc_sequence_step_args::sstvenc_sequence_step_set_ts_unit ts
static void sstvenc_sequencer_exec_set_ts(struct sstvenc_sequencer *const seq, const struct sstvenc_sequencer_step *const step)
static void sstvenc_sequencer_exec_step(struct sstvenc_sequencer *const seq)
void sstvenc_sequencer_step_set_timescale(struct sstvenc_sequencer_step *const step, uint8_t time_unit, _Bool convert)
void sstvenc_sequencer_step_idec_reg(struct sstvenc_sequencer_step *const step, uint8_t reg, double value)
double regs[SSTVENC_SEQ_NUM_REGS]
void sstvenc_sequencer_step_silence(struct sstvenc_sequencer_step *const step, double duration)
size_t sstvenc_sequencer_fill_buffer(struct sstvenc_sequencer *const seq, double *buffer, size_t buffer_sz)
struct sstvenc_sequencer_step::sstvenc_sequence_step_args::sstvenc_sequence_step_image image
void sstvenc_sequencer_advance(struct sstvenc_sequencer *const seq)
void sstvenc_sequencer_reset(struct sstvenc_sequencer *const seq)
static void sstvenc_sequencer_next_step(struct sstvenc_sequencer *const seq, _Bool notify)
static void sstvenc_sequencer_exec_update_reg(struct sstvenc_sequencer *const seq, const struct sstvenc_sequencer_step *const step)
struct sstvenc_oscillator osc
static void sstvenc_sequencer_begin_silence(struct sstvenc_sequencer *const seq, const struct sstvenc_sequencer_step *const step)
void sstvenc_sequencer_init(struct sstvenc_sequencer *const seq, const struct sstvenc_sequencer_step *steps, sstvenc_sequencer_event_cb *event_cb, const void *event_cb_ctx, uint32_t sample_rate)
void sstvenc_sequencer_compute(struct sstvenc_sequencer *const seq)
static void sstvenc_sequencer_begin_tone(struct sstvenc_sequencer *const seq, const struct sstvenc_sequencer_step *const step)
struct sstvenc_oscillator osc
struct sstvenc_pulseshape ps
void sstvenc_modulator_init(struct sstvenc_mod *const mod, const struct sstvenc_mode *mode, const char *fsk_id, const uint8_t *framebuffer, double rise_time, double fall_time, uint32_t sample_rate, uint8_t time_unit)
void sstvenc_modulator_compute(struct sstvenc_mod *const mod)
#define SSTVENC_TS_UNIT_SECONDS
uint64_t sstvenc_ts_unit_scale(uint8_t unit)
uint32_t sstvenc_ts_unit_to_samples(double time, uint32_t sample_rate, uint8_t unit)