1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
#ifndef foosydneybufferqhfoo
#define foosydneybufferqhfoo
#include <inttypes.h>
#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
|