#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", [FmtVorbis] = "vorbis",}; intstr2fmt(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 "???";} uvlongnanosec(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);} voidnsleep(uvlong ns){#define Nmsec 1000000ULL uvlong start, end; start = nanosec(); end = start + ns; ns = start; do{ if(end - ns > 85*Nmsec) sleep(80); else if (end - ns > 25*Nmsec) sleep(20); else if (end - ns > 1*Nmsec) sleep(1); else break; ns = nanosec(); }while(ns < end);}
#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",
[FmtVorbis] = "vorbis",
};
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);
}
void
nsleep(uvlong ns)
{
#define Nmsec 1000000ULL
uvlong start, end;
start = nanosec();
end = start + ns;
ns = start;
do{
if(end - ns > 85*Nmsec)
sleep(80);
else if (end - ns > 25*Nmsec)
sleep(20);
else if (end - ns > 1*Nmsec)
sleep(1);
else
break;
ns = nanosec();
}while(ns < end);
}