ref: 339de1879aec67a053cc0bdf11bb47d3eaf290a2
dir: /stream.c/
#include <u.h> #include <libc.h> #include "stream.h" struct Stream { Streamops ops; }; extern Streamops ivfops; static struct { char *name; Streamops *o; }ops[] = { {"ivf", &ivfops}, }; Stream * Sopen(char *filename, Streaminfo *info) { int i, failed; Stream *s; for(i = 0; i < nelem(ops); i++){ failed = 0; if((s = ops[i].o->open(filename, info, &failed)) != nil){ memmove(&s->ops, ops[i].o, sizeof(Streamops)); return s; } if(failed){ werrstr("%s: %r", ops[i].name); return nil; } } werrstr("unknown format"); return nil; } void Sclose(Stream *s) { s->ops.close(s); } int Sread(Stream *s, Streamframe *f) { return s->ops.read(s, f); } vlong Soffset(Stream *s) { return s->ops.offset(s); }