shithub: treason

ref: 4812d7f4d60a30404a8f0d0cb1f244ae288387d5
dir: /stream.c/

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

extern Streamops ivfops;
extern Streamops mp4ops;

static struct {
	char *name;
	Streamops *o;
}ops[] = {
	{"mp4", &mp4ops},
	{"ivf", &ivfops},
};

Stream *
Sopen(char *filename, int *num)
{
	int i, failed;
	Stream *s;

	for(i = 0; i < nelem(ops); i++){
		failed = 0;
		if((s = ops[i].o->open(filename, &failed, num)) != nil)
			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);
}