17 {.frequency = 0, .duration_ns = 0},
24 {.frequency = 0, .duration_ns = 0},
30 {.frequency = 0, .duration_ns = 0},
36 {.frequency = 0, .duration_ns = 0},
42 {.frequency = 0, .duration_ns = 0},
48 {.frequency = 0, .duration_ns = 0},
54 {.frequency = 0, .duration_ns = 0},
59 {.frequency = 0, .duration_ns = 0},
66 {.frequency = 0, .duration_ns = 0},
71 {.frequency = 0, .duration_ns = 0},
78 {.frequency = 0, .duration_ns = 0},
83 {.frequency = 0, .duration_ns = 0},
88#define SSTVENC_PASOKON_P3_TIMEUNIT (1000000000.0 / 4800.0)
89#define SSTVENC_PASOKON_P5_TIMEUNIT (1000000000.0 / 3200.0)
90#define SSTVENC_PASOKON_P7_TIMEUNIT (1000000000.0 / 2400.0)
92#define SSTVENC_PASOKON_SYNC(unit) (25 * unit)
93#define SSTVENC_PASOKON_GAP(unit) (5 * unit)
94#define SSTVENC_PASOKON_SCAN(unit) (640 * unit)
101 {.frequency = 0, .duration_ns = 0},
107 {.frequency = 0, .duration_ns = 0},
115 {.frequency = 0, .duration_ns = 0},
121 {.frequency = 0, .duration_ns = 0},
129 {.frequency = 0, .duration_ns = 0},
135 {.frequency = 0, .duration_ns = 0},
142 {.frequency = 0, .duration_ns = 0},
149 {.frequency = 0, .duration_ns = 0},
155 {.frequency = 0, .duration_ns = 0},
160 {.frequency = 0, .duration_ns = 0},
167 .description =
"Robot 8 B/W",
175 .scanline_period_ns = {59900000, 0, 0},
184 .description =
"Robot 12 B/W",
192 .scanline_period_ns = {93000000, 0, 0},
201 .description =
"Robot 24 B/W",
209 .scanline_period_ns = {93000000, 0, 0},
219 .description =
"Robot 36",
228 .scanline_period_ns = {88000000, 44000000, 88000000, 44000000},
237 .description =
"Robot 72",
246 .scanline_period_ns = {138000000, 69000000, 69000000},
256 .description =
"Scottie S1",
264 .scanline_period_ns = {136740000, 136740000, 136740000},
273 .description =
"Scottie S2",
281 .scanline_period_ns = {86564000, 86564000, 86564000},
290 .description =
"Scottie DX",
298 .scanline_period_ns = {344100000, 344100000, 344100000},
308 .description =
"Martin M1",
316 .scanline_period_ns = {146432000, 146432000, 146432000},
325 .description =
"Martin M2",
333 .scanline_period_ns = {73216000, 73216000, 73216000},
343 .description =
"Pasokon P3",
363 .description =
"Pasokon P5",
383 .description =
"Pasokon P7",
404 .description =
"PD-50",
412 .scanline_period_ns = {91520000, 91520000, 91520000, 91520000},
421 .description =
"PD-90",
429 .scanline_period_ns = {170240000, 170240000, 170240000, 170240000},
438 .description =
"PD-120",
446 .scanline_period_ns = {121600000, 121600000, 121600000, 121600000},
455 .description =
"PD-160",
463 .scanline_period_ns = {195584000, 195584000, 195584000, 195584000},
472 .description =
"PD-180",
480 .scanline_period_ns = {183040000, 183040000, 183040000, 183040000},
489 .description =
"PD-240",
497 .scanline_period_ns = {244480000, 244480000, 244480000, 244480000},
506 .description =
"PD-290",
514 .scanline_period_ns = {228800000, 228800000, 228800000, 228800000},
529 .description =
"Wraase SC-2 60",
537 .scanline_period_ns = {77627500, 77627500, 77627500},
546 .description =
"Wraase SC-2 120",
554 .scanline_period_ns = {155985000, 155985000, 155985000},
563 .description =
"Wraase SC-2 180",
571 .scanline_period_ns = {235000000, 235000000, 235000000},
615 const char* fsk_id) {
621 for (uint8_t ch = 0; ch < 4; ch++) {
652 txtime *= mode->
height / 2;
693 size_t sz = mode->
width * mode->
height *
sizeof(uint8_t);
705 uint16_t x, uint16_t y) {
706 assert(x < mode->
width);
709 uint32_t idx = y * mode->
width;
#define SSTVENC_CSO_CH_NONE
#define SSTVENC_CSO_CH_Y2
#define SSTVENC_CSO_MODE_YUV
#define SSTVENC_CSO_MODE_RGB
#define SSTVENC_CSO_MODE_MONO
#define SSTVENC_CSO_MODE_YUV2
#define SSTVENC_MODE_GET_CH(n, mode)
#define SSTVENC_CSO_MASK_MODE
#define SSTVENC_MODE_ORDER(cs, c0, c1, c2, c3)
#define SSTVENC_FREQ_WHITE
#define SSTVENC_FREQ_BLACK
#define SSTVENC_FREQ_VIS_START
#define SSTVENC_FREQ_SYNC
const struct sstvenc_encoder_pulse * gap01
const struct sstvenc_encoder_pulse * backporch
const struct sstvenc_encoder_pulse * finalseq
const struct sstvenc_encoder_pulse * gap23
const struct sstvenc_encoder_pulse * gap12
uint16_t colour_space_order
const struct sstvenc_encoder_pulse * frontporch
const struct sstvenc_encoder_pulse * initseq
uint32_t scanline_period_ns[4]
size_t sstvenc_mode_get_fb_sz(const struct sstvenc_mode *const mode)
#define SSTVENC_PASOKON_GAP(unit)
#define SSTVENC_PASOKON_P7_TIMEUNIT
uint8_t sstvenc_get_mode_count()
static const struct sstvenc_encoder_pulse sstvenc_sstv_robot36_gap[]
static const struct sstvenc_encoder_pulse sstvenc_sstv_martin_sep[]
uint64_t sstvenc_pulseseq_get_txtime(const struct sstvenc_encoder_pulse *seq)
static const struct sstvenc_encoder_pulse sstvenc_sstv_pasokon_p7_sep[]
const struct sstvenc_mode * sstvenc_get_mode_by_idx(uint8_t idx)
static const struct sstvenc_encoder_pulse sstvenc_sstv_scottie_sep01[]
static const struct sstvenc_encoder_pulse sstvenc_sstv_wraasesc2_180_fp[]
#define SSTVENC_PERIOD_FSKID_BIT
#define SSTVENC_PERIOD_VIS_SYNC
static const struct sstvenc_encoder_pulse sstvenc_sstv_robot36_fp[]
static const struct sstvenc_encoder_pulse sstvenc_sstv_robot72_gap12[]
uint64_t sstvenc_mode_get_txtime(const struct sstvenc_mode *const mode, const char *fsk_id)
const struct sstvenc_mode * sstvenc_get_mode_by_name(const char *name)
#define SSTVENC_PERIOD_VIS_BIT
static const struct sstvenc_encoder_pulse sstvenc_sstv_scottie_bp[]
static const struct sstvenc_encoder_pulse sstvenc_sstv_wraasesc2_sep[]
static const struct sstvenc_encoder_pulse sstvenc_sstv_pasokon_p3_fp[]
static const struct sstvenc_encoder_pulse sstvenc_sstv_pd_fp[]
static const struct sstvenc_mode sstvenc_sstv_modes[]
static const struct sstvenc_encoder_pulse sstvenc_sstv_pasokon_p5_sep[]
#define SSTVENC_PASOKON_SYNC(unit)
static const struct sstvenc_encoder_pulse sstvenc_sstv_pasokon_p7_fp[]
#define SSTVENC_PASOKON_SCAN(unit)
#define SSTVENC_PERIOD_VIS_START
#define SSTVENC_PASOKON_P5_TIMEUNIT
static const struct sstvenc_encoder_pulse sstvenc_sstv_scottie_sep12[]
static const struct sstvenc_encoder_pulse sstvenc_sstv_scottie_fp[]
static const struct sstvenc_encoder_pulse sstvenc_sstv_pasokon_p5_fp[]
#define SSTVENC_PASOKON_P3_TIMEUNIT
static const struct sstvenc_encoder_pulse sstvenc_sstv_robotbw_fp[]
uint32_t sstvenc_get_pixel_posn(const struct sstvenc_mode *const mode, uint16_t x, uint16_t y)
static const struct sstvenc_encoder_pulse sstvenc_sstv_robot72_fp[]
static const struct sstvenc_encoder_pulse sstvenc_sstv_wraasesc2_120_fp[]
static const struct sstvenc_encoder_pulse sstvenc_sstv_pasokon_p3_sep[]
static const struct sstvenc_encoder_pulse sstvenc_sstv_martin_fp[]
static const struct sstvenc_encoder_pulse sstvenc_sstv_robot72_gap01[]