libsstvenc
Asynchronous Analogue SSTV encoder
Loading...
Searching...
No Matches
timescale.c
Go to the documentation of this file.
1
13/*
14 * © Stuart Longland VK4MSL
15 * SPDX-License-Identifier: MIT
16 */
17
18#include <assert.h>
20#include <math.h>
21
22uint64_t sstvenc_ts_unit_scale(uint8_t unit) {
23 switch (unit) {
25 return 1;
27 return 1000;
29 return 1000000;
31 return 1000000000;
32 default:
33 /* Not supported */
34 assert(0);
35 }
36}
37
38uint32_t sstvenc_ts_clamp_samples(uint64_t samples) {
39 if (samples > UINT32_MAX) {
41 } else {
42 return samples;
43 }
44}
45
46uint32_t sstvenc_ts_unit_to_samples(double time, uint32_t sample_rate,
47 uint8_t unit) {
48 if (time == INFINITY) {
50 } else {
52 ((uint64_t)((time * sample_rate) + 0.5))
53 / sstvenc_ts_unit_scale(unit));
54 }
55}
56
57double sstvenc_ts_samples_to_unit(uint32_t samples, uint32_t sample_rate,
58 uint8_t unit) {
59 if (samples == SSTVENC_TS_INFINITE) {
60 return INFINITY;
61 } else {
62 uint64_t n = samples * sstvenc_ts_unit_scale(unit);
63 return ((double)n) / ((double)sample_rate);
64 }
65}
66
#define SSTVENC_TS_UNIT_SECONDS
Definition timescale.h:36
#define SSTVENC_TS_UNIT_MICROSECONDS
Definition timescale.h:38
#define SSTVENC_TS_UNIT_MILLISECONDS
Definition timescale.h:37
#define SSTVENC_TS_UNIT_NANOSECONDS
Definition timescale.h:39
#define SSTVENC_TS_INFINITE
Definition timescale.h:28
uint64_t sstvenc_ts_unit_scale(uint8_t unit)
Definition timescale.c:22
double sstvenc_ts_samples_to_unit(uint32_t samples, uint32_t sample_rate, uint8_t unit)
Definition timescale.c:57
uint32_t sstvenc_ts_clamp_samples(uint64_t samples)
Definition timescale.c:38
uint32_t sstvenc_ts_unit_to_samples(double time, uint32_t sample_rate, uint8_t unit)
Definition timescale.c:46