shithub: treason

ref: 44f4ed0d8f048de95984e01e33d34cff27040114
dir: /misc.c/

View raw version
#include <u.h>
#include <libc.h>
#include <tos.h>
#include "misc.h"
#include "stream.h"

int nproc, debug;

static char *fmts[] = {
	[FmtAV1]  = "av01",
	[FmtVP9]  = "vp09",
	[FmtVP8]  = "vp08",
	[FmtH264] = "avc1",
	[FmtAAC]  = "mp4a",
	[FmtOpus] = "opus",
};

int
str2fmt(char *s)
{
	int i;

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

	return i < nelem(fmts) ? i : -1;
}

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

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

	if(fasthz == 0){
		if((fasthz = _tos->cyclefreq) == 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");
			return 0;
		}else{
			cycles(&xstart);
		}
	}
	cycles(&x);
	x -= xstart;

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

	return x / (fasthz / div);
}