libsstvenc
Asynchronous Analogue SSTV encoder
Loading...
Searching...
No Matches
sstvmode.h
Go to the documentation of this file.
1#ifndef _SSTVENC_SSTVMODE_H
2#define _SSTVENC_SSTVMODE_H
3
11/*
12 * © Stuart Longland VK4MSL
13 * SPDX-License-Identifier: MIT
14 */
15
16#include <assert.h>
17#include <stdint.h>
18#include <string.h>
19
20#define SSTVENC_PERIOD_VIS_START (300000u)
21#define SSTVENC_PERIOD_VIS_SYNC (10000u)
22#define SSTVENC_PERIOD_VIS_BIT (30000u)
23
24#define SSTVENC_PERIOD_FSKID_BIT (22000u)
25
35#define SSTVENC_CSO_BIT_MODE (12)
36
42#define SSTVENC_CSO_BIT_C(n) ((n) * 3)
43
45#define SSTVENC_CSO_MASK_MODE (0170000)
46
52#define SSTVENC_CSO_MASK_C(n) (07 << ((n) * 3))
53
60#define SSTVENC_CSO_MODE_MONO (0 << SSTVENC_CSO_BIT_MODE)
61
63#define SSTVENC_CSO_MODE_RGB (1 << SSTVENC_CSO_BIT_MODE)
64
66#define SSTVENC_CSO_MODE_YUV (2 << SSTVENC_CSO_BIT_MODE)
67
75#define SSTVENC_CSO_MODE_YUV2 (3 << SSTVENC_CSO_BIT_MODE)
76
86#define SSTVENC_CSO_CH_NONE (0)
87#define SSTVENC_CSO_CH_Y (1)
88#define SSTVENC_CSO_CH_U (2)
89#define SSTVENC_CSO_CH_V (3)
90#define SSTVENC_CSO_CH_R (4)
91#define SSTVENC_CSO_CH_G (5)
92#define SSTVENC_CSO_CH_B (6)
93#define SSTVENC_CSO_CH_Y2 (7)
108#define SSTVENC_MODE_GET_CH(n, mode) \
109 (((mode) & SSTVENC_CSO_MASK_C(n)) >> SSTVENC_CSO_BIT_C(n))
110
127#define SSTVENC_MODE_ORDER(cs, c0, c1, c2, c3) \
128 (((cs) & SSTVENC_CSO_MASK_MODE) \
129 | (((c0) << SSTVENC_CSO_BIT_C(0)) & SSTVENC_CSO_MASK_C(0)) \
130 | (((c1) << SSTVENC_CSO_BIT_C(1)) & SSTVENC_CSO_MASK_C(1)) \
131 | (((c2) << SSTVENC_CSO_BIT_C(2)) & SSTVENC_CSO_MASK_C(2)) \
132 | (((c3) << SSTVENC_CSO_BIT_C(3)) & SSTVENC_CSO_MASK_C(3)))
133
143 uint32_t frequency;
148 uint32_t duration_ns;
149};
150
157 const char* description;
158
160 const char* name;
161
167
174
180
186
192
199
205
211
215 uint16_t width;
216
220 uint16_t height;
221
227
231 uint8_t vis_code;
232};
233
237uint8_t sstvenc_get_mode_count();
238
242const struct sstvenc_mode* sstvenc_get_mode_by_idx(uint8_t idx);
243
248const struct sstvenc_mode* sstvenc_get_mode_by_name(const char* name);
249
253uint64_t sstvenc_pulseseq_get_txtime(const struct sstvenc_encoder_pulse* seq);
254
262uint64_t sstvenc_mode_get_txtime(const struct sstvenc_mode* const mode,
263 const char* fsk_id);
264
268size_t sstvenc_mode_get_fb_sz(const struct sstvenc_mode* const mode);
269
279uint32_t sstvenc_get_pixel_posn(const struct sstvenc_mode* const mode,
280 uint16_t x, uint16_t y);
281
287#endif
uint8_t vis_code
Definition sstvmode.h:231
const struct sstvenc_encoder_pulse * gap01
Definition sstvmode.h:179
const struct sstvenc_encoder_pulse * backporch
Definition sstvmode.h:198
uint16_t width
Definition sstvmode.h:215
const char * description
Definition sstvmode.h:157
const struct sstvenc_encoder_pulse * finalseq
Definition sstvmode.h:204
const struct sstvenc_encoder_pulse * gap23
Definition sstvmode.h:191
const struct sstvenc_encoder_pulse * gap12
Definition sstvmode.h:185
const char * name
Definition sstvmode.h:160
uint16_t colour_space_order
Definition sstvmode.h:226
const struct sstvenc_encoder_pulse * frontporch
Definition sstvmode.h:173
const struct sstvenc_encoder_pulse * initseq
Definition sstvmode.h:166
uint16_t height
Definition sstvmode.h:220
uint32_t scanline_period_ns[4]
Definition sstvmode.h:210
size_t sstvenc_mode_get_fb_sz(const struct sstvenc_mode *const mode)
Definition sstvmode.c:692
uint8_t sstvenc_get_mode_count()
Definition sstvmode.c:581
uint64_t sstvenc_pulseseq_get_txtime(const struct sstvenc_encoder_pulse *seq)
Definition sstvmode.c:603
const struct sstvenc_mode * sstvenc_get_mode_by_idx(uint8_t idx)
Definition sstvmode.c:585
uint64_t sstvenc_mode_get_txtime(const struct sstvenc_mode *const mode, const char *fsk_id)
Definition sstvmode.c:614
const struct sstvenc_mode * sstvenc_get_mode_by_name(const char *name)
Definition sstvmode.c:593
uint32_t sstvenc_get_pixel_posn(const struct sstvenc_mode *const mode, uint16_t x, uint16_t y)
Definition sstvmode.c:704