~ft/treason

ref: c1156352ba4eceae2ec875fd06fc94c38c92271f treason/misc.c -rw-r--r-- 1.1 KiB
c1156352 — Sigrid Solveig Haflínudóttir info: mixed up dispdelay and yuv→rgb, fix it 1 year, 1 month ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include <u.h>
#include <libc.h>
#include <tos.h>
#include "misc.h"
#include "stream.h"

int nproc, debug;

static char *fmts[Numfmt] = {
	[FmtAAC]  = "aac",
	[FmtAV1]  = "av1",
	[FmtFlac] = "flac",
	[FmtH264] = "h264",
	[FmtMp3]  = "mp3",
	[FmtOpus] = "opus",
	[FmtSrt]  = "srt",
	[FmtVP8]  = "vp8",
	[FmtVP9]  = "vp9",
};

int
str2fmt(char *s)
{
	int i;

	for(i = 0; i < nelem(fmts); i++){
		if(fmts[i] != nil && strcmp(fmts[i], s) == 0)
			return i;
	}

	return -1;
}

char *
fmt2str(int fmt)
{
	if(fmt >= 0 && fmt < nelem(fmts))
		return fmts[fmt];

	return "???";
}

uvlong
nanosec(void)
{
	static uvlong fasthz, xstart;
	uvlong x, div;

	if(fasthz == ~0ULL)
		return nsec() - xstart;

	if(fasthz == 0){
		fasthz = _tos->cyclefreq;
		if(fasthz == 0){
			fasthz = ~0ULL;
			xstart = nsec();
			fprint(2, "cyclefreq not available, falling back to nsec()\n");
			fprint(2, "you might want to disable aux/timesync\n");
		}else{
			cycles(&xstart);
		}
		return 0;
	}
	cycles(&x);
	x -= xstart;

	/* this is ugly */
	for(div = 1000000000ULL; x < 0x1999999999999999ULL && div > 1 ; div /= 10ULL, x *= 10ULL);

	return x / (fasthz / div);
}