ref: aad9511a85b15ced2fde315c693ce12a05f1f315
dir: /srt.c/
#include <u.h>
#include <libc.h>
#include <bio.h>
#include "common.h"
enum {
Timedenum = 1000ULL,
};
int
srttsfmt(Fmt *f)
{
char *s, *e, tmp[64];
uvlong nsec, sec, msec;
s = tmp;
e = tmp + sizeof(tmp);
nsec = va_arg(f->args, uvlong);
sec = nsec / 1000000000ULL;
msec = nsec/1000000ULL - sec*1000ULL;
if(sec >= 3600){
s = seprint(s, e, "%02zd:", sec/3600);
sec %= 3600;
}
s = seprint(s, e, "%02zd:", sec/60);
sec %= 60;
seprint(s, e, "%02zd,%03zd", sec, msec);
return fmtstrcpy(f, tmp);
}
int
srtpacket(Biobuf *out, Packetctx *ctx, Packet *p, int np, uvlong ts)
{
int i, n;
uchar *s, *o;
for(i = 0; i < np; i++, p++){
for(s = o = p->data, n = 0; n < p->sz;){
if(*s == '\r'){
*o++ = '\n';
s++;
n++;
if(n >= p->sz)
break;
if(*s == '\n'){
s++;
n++;
continue;
}
}
*o++ = *s++;
n++;
}
if(*o == '\n' && o != p->data)
o--;
Bprint(out, "%zd\n%P --> %P\n", ++ctx->frid, ts, ts+ctx->blockdur);
Bwrite(out, p->data, o - p->data);
Bwrite(out, "\n\n", 2);
}
Bflush(out);
return 0;
}