#ifndef foosydneybufferqhfoo #define foosydneybufferqhfoo #include #include "macro.h" #include "llist.h" #include "sydney.h" typedef struct bufferq_item { int64_t idx; size_t size; SA_LLIST_ITEM(struct bufferq_item, bufferq); } bufferq_item_t; #define BUFFERQ_ITEM_DATA(x) ((void*) (uint8_t*) (x) + ALIGN(sizeof(bufferq_item_t))) typedef struct bufferq { SA_LLIST_HEAD(bufferq_item_t, *items); bufferq_item_t **last; int64_t read_index, write_index, end_index; size_t sample_size; unsigned nchannels; } bufferq_t; int bufferq_init(bufferq_t *q, unsigned nchannels, size_t sample_size); void bufferq_done(bufferq_t *q); int bufferq_push(bufferq_t *q, unsigned channel, const void *data, size_t nbytes, int64_t offset, sa_seek_t whence); int bufferq_get(bufferq_t *q, void *i[], size_t *bytes); int bufferq_drop(bufferq_t *q, int64_t bytes); #endif